举例来说,我有一些用注释的bean @Foo
,并且我想跟踪它们,因为我想控制它们初始化时发生的情况,有没有办法注册自定义的spring beanfactory,使我能够做到这一点?
如果我还有另一个注释@Bar
也需要这种特殊的初始化怎么办?
我最初的想法是通知用户使用注释对每个bean进行@Lazy
注释,然后使用bean工厂的后处理器,我将更改bean定义的某些属性。
解决方案是实现BeanFactoryPostProcessor
接口。这使我们可以在实例化任何Bean 之前访问,因此允许我们更改诸如范围之类的内容,或者使Bean延迟初始化,甚至更改Bean的构造函数参数!BeanDefinition
如果您的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 ... */
}
}
@Component
必须使用ps 注释才能正常工作
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句