Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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/2/spring/12.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/0/amazon-s3/2.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
Java Spring Boot:BeanFactoryPostProcessor';s后处理BeanFactory未被调用_Java_Spring_Spring Boot_Dependency Injection_Autowired - Fatal编程技术网

Java Spring Boot:BeanFactoryPostProcessor';s后处理BeanFactory未被调用

Java Spring Boot:BeanFactoryPostProcessor';s后处理BeanFactory未被调用,java,spring,spring-boot,dependency-injection,autowired,Java,Spring,Spring Boot,Dependency Injection,Autowired,我想在Spring boot中实现类似的功能 我尝试了针对这个问题给出的解决方案,但在我的Spring Boot应用程序中,beanFactory后处理程序的postprocessinfactory方法似乎从未被调用 以下是方法的实现: @SuppressWarnings("unused") public class LoggerBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override pub

我想在Spring boot中实现类似的功能

我尝试了针对这个问题给出的解决方案,但在我的Spring Boot应用程序中,
beanFactory后处理程序的
postprocessinfactory
方法似乎从未被调用

以下是方法的实现:

@SuppressWarnings("unused")
public class LoggerBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        String [] beanClasses = beanFactory.getBeanDefinitionNames();
        for(String beanName : beanClasses){
            Object beanObject = beanFactory.getBean(beanName);
            if(beanObject.getClass().isAnnotationPresent(Loggable.class)){
                try {
                    Field loggerField = beanObject.getClass().getDeclaredField("logger");
                    loggerField.setAccessible(true);
                    loggerField.set(beanObject, LoggerFactory.getLogger(beanObject.getClass()));
                }catch (NoSuchFieldException | IllegalAccessException e){
                    e.printStackTrace();
                }
            }
        }
    }

Spring应该知道您已经添加了一个新的BeanFactoryPostProcessor,所以您应该将其声明为配置中的bean。 对于xml配置:

<bean class="your.package.LoggerBeanFactoryPostProcessor"  />
注意:确保在JavaConfig中创建一个返回BeanFactoryPostProcessor static的方法。如果没有它,在您想要使用其他一些与spring相关的特性之前,它将正常工作。例如,使用属性
@Value
将不起作用

从:

通过将此方法标记为static,可以调用它而不会导致 实例化其声明的@Configuration类,从而避免 上述生命周期冲突。但是请注意,静态@Bean 对于作用域和AOP语义,方法将不会得到增强 如上所述。这适用于BFPP案例,因为它们不是 通常由其他@Bean方法引用


您是否将该类作为bean添加到配置中?@KenBekov我需要在Spring Boot项目中添加该类的确切位置?将其作为
公共静态
@bean
方法添加到您的配置中。仅添加类不会起任何作用。当我将XmlBeanDefinitionReader与DefaultListableBeanFactory一起使用时,没有调用XML方法BeanFactoryPostProcessor,我也不明白为什么?@Yujiao可能会发布一个单独的问题,其中包含代码示例和所有详细信息?我在
github
上发布了一个新问题和一个示例,
@Bean
public static BeanFactoryPostProcessor loggerBeanFactoryPostProcessor() {
    return new LoggerBeanFactoryPostProcessor();
}