簡體   English   中英

Spring動態bean定義自動裝配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM