Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 带有@Bean注释的BeanPostProcessor不工作_Spring_Spring Ioc - Fatal编程技术网

Spring 带有@Bean注释的BeanPostProcessor不工作

Spring 带有@Bean注释的BeanPostProcessor不工作,spring,spring-ioc,Spring,Spring Ioc,我正在尝试创建一个BeanPostProcessor,用于向映射注册一些值 如果我通过xml定义创建bean实例,BeanPostProcessor可以正常工作,但是如果我将bean定义更改为@Configuration,它就不能工作 后处理器 public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitializat

我正在尝试创建一个
BeanPostProcessor
,用于向映射注册一些值

如果我通过xml定义创建bean实例,
BeanPostProcessor
可以正常工作,但是如果我将bean定义更改为
@Configuration
,它就不能工作

后处理器

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/>
组件扫描配置

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"/>


我做错了什么?

我认为这样做的方法是用
组件注释
BeanPostProcessor

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

这将由Spring在组件扫描期间自动处理(因此无需向配置中添加带注释的方法)。

在中询问另一个问题后,我得到了一个解决方案


bean factory方法应该被定义为一个
静态方法来工作。

我能看看你的主要方法吗?@harish.raj这是一个web应用程序,你使用哪个Spring版本?你能在配置中显示加载bean定义的配置吗class@BijuKunjummen配置类位于组件中扫描路径