繁体   English   中英

使用自定义注释注释的bean的自定义初始化

[英]Custom initializing of beans annotated with a custom annotation

比如说,我有一些用@Foo注释的@Foo ,我想跟踪它们,因为我想控制它们初始化时发生的事情,有没有办法注册自定义的spring beanfactory,这将允许我执行此操作?

如果我还有另一个注释@Bar也需要这种特殊的初始化怎么办?

我最初的想法是通知用户使用@Lazy注释对每个bean进行注释,然后使用bean工厂的后处理器,我将更改bean定义的某些属性。

解决方案是实现BeanFactoryPostProcessor接口。 这使我们可以实例化任何Bean 之前访问BeanDefinition ,因此允许我们更改诸如范围之类的内容,或者使Bean延迟初始化,甚至更改Bean的构造函数参数!

如果您的spring应用程序是手动启动的,即通过创建SpringApplicationBuilder ,那么您甚至可以将此类的实例传递给构建器的构造函数,并且在应用程序启动后将使用该实例。

@Component
public class FooBarBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(@NonNull ConfigurableListableBeanFactory beanFactory) throws BeansException {
        /*
        String[] fooBeans = beanFactory.getBeanNamesForAnnotation(Foo.class);
        BeanDefinition bean = beanFactory.getBeanDefinition(...);

        /* do your processing here ... */
    }
}

必须使用ps @Component批注

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM