1 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
解決方案是實(shí)現(xiàn)BeanFactoryPostProcessor
接口。這使我們能夠在任何 bean 被實(shí)例化之前訪問,因此允許我們更改范圍之類的東西,或者使 bean 延遲初始化,甚至更改 bean 的構(gòu)造函數(shù)參數(shù)!BeanDefinition
如果您的 spring 應(yīng)用程序是手動(dòng)啟動(dòng)的,即通過創(chuàng)建一個(gè)SpringApplicationBuilder
,那么您甚至可以將此類的實(shí)例傳遞給構(gòu)建器的構(gòu)造函數(shù),一旦應(yīng)用程序啟動(dòng),它就會(huì)被使用。
@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
注釋才能工作
添加回答
舉報(bào)