2012-12-24 137 views
2

我正在嘗試創建一個BeanPostProcessor用於向Map註冊一些值。@Bean註釋不起作用的BeanPostProcessor

BeanPostProcessor工作正常,如果我通過xml定義創建bean實例,但如果我將bean定義更改爲@Configuration它不起作用。如果我使用上面的配置

PostProcessor中

public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor { 

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
     return bean; 
    } 

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
     System.out.println("Bean '" + beanName); 
     return bean; 
    } 
} 

bean配置

import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.context.annotation.Bean; 

@org.springframework.context.annotation.Configuration 
public class Configuration { 
    @Bean 
    public @Qualifier("InstantiationTracingBeanPostProcessor") 
    InstantiationTracingBeanPostProcessor activitiConfigurationBeanPostProcessor() { 
     return new InstantiationTracingBeanPostProcessor(); 
    } 
} 

組件掃描配置

<context:component-scan base-package="xyz.config"/> 
<context:annotation-config/> 

應用程序只是掛起。但如果我使用基於xml的配置,如下所示,它工作正常。

<bean class="xyz.bean.InstantiationTracingBeanPostProcessor"/> 

我在這裏做錯了什麼?

+0

我能看到你的主要方法嗎? –

+0

@ harish.raj它是一個網絡應用程序 –

+0

你使用哪個Spring版本? – Ralph

回答

3

spring forum詢問另一個問題後,我得到了一個解決方案。

應該將bean工廠方法定義爲static method以使其工作。

2

我認爲這樣做是爲了註釋的方式你BeanPostProcessorComponent

@Component 
public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor { 
    //... 
} 

這將是由彈簧組件掃描過程中自動進行處理(所以沒必要一個@Bean -annotated方法添加到配置)。