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

例如,我有一些用 注释的 bean @Foo,我想跟踪这些 bean,因为我想控制它们初始化时发生的情况,有没有办法注册一个自定义的 spring beanfactory 来允许我这样做?

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

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


幕布斯7119047
浏览 84回答 1
1回答

慕村9548890

解决方案是实现BeanFactoryPostProcessor接口。这使我们能够在任何 bean 被实例化之前访问,因此允许我们更改范围之类的东西,或者使 bean 延迟初始化,甚至更改 bean 的构造函数参数!BeanDefinition如果您的 spring 应用程序是手动启动的,即通过创建一个SpringApplicationBuilder,那么您甚至可以将此类的实例传递给构建器的构造函数,一旦应用程序启动,它就会被使用。@Componentpublic 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注释才能工作
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java