[英]Spring dynamic bean definition autowire
因此,首先簡短地介紹一下:我有一個有效的應用程序上下文,現在我想創建一個新的bean工廠,用一些動態bean定義對其進行擴展。 因此,我創建了一個DefaultListableBeanFactory
的新實例,將基礎應用程序上下文作為父級傳遞。 然后創建一個新的bean定義:
BeanDefinition beanDef = BeanDefinitionBuilder.rootBeanDefinition(beanType)
.setScope(BeanDefinition.SCOPE_PROTOTYPE)
.setLazyInit(false)
.setAbstract(false)
.setDependencyCheck(AbstractBeanDefinition.DEPENDENCY_CHECK_ALL)
.getBeanDefinition();
最后,我在新創建的bean工廠中注冊了它
beanFactory.registerBeanDefinition(beanName, beanDef);
然后一段時間后,我想獲取該bean的新實例,所以我這樣做:
Object beanInstance = beanFactory.getBean(jobType);
現在我希望用@Autowired
注釋的字段被初始化..但是沒有。 調用beanFactory.autowireBean(beanInstance)
無濟於事。
在基本應用程序上下文中查找了其他一些bean定義之后,我可以看到我的definitoin沒有任何屬性,可以通過調用beanDef.setAttribute()
來添加它們,但這需要我提前知道它們。
現在提問。 有沒有一種方法可以通過編程方式創建完全初始化的bean定義,以便正確進行自動裝配?
因此,我發現了我所缺少的東西: AutowiredAnnotationBeanPostProcessor
,需要將其添加到bean工廠中以啟動@Autowired
和@Value
批注。
對於@PostConstruct
和@PreDestroy
也需要CommonAnnotationBeanPostProcessor
由Spring Boot為應用程序上下文創建的Bean工廠共有12個Bean后處理器,因此可能需要其他一些處理器才能獲得所有功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.