Java Spring动态bean定义autowire
因此,第一个简短的介绍: 我有一个工作的应用程序上下文,现在我想创建一个新的bean工厂,用一些动态bean定义扩展它。 因此,我创建了一个新的Java Spring动态bean定义autowire,java,spring,Java,Spring,因此,第一个简短的介绍: 我有一个工作的应用程序上下文,现在我想创建一个新的bean工厂,用一些动态bean定义扩展它。 因此,我创建了一个新的DefaultListableBeanFactory实例,将基本应用程序上下文作为父对象传递。 然后我创建了一个新的bean定义: BeanDefinition beanDef = BeanDefinitionBuilder.rootBeanDefinition(beanType)
DefaultListableBeanFactory
实例,将基本应用程序上下文作为父对象传递。
然后我创建了一个新的bean定义:
BeanDefinition beanDef = BeanDefinitionBuilder.rootBeanDefinition(beanType)
.setScope(BeanDefinition.SCOPE_PROTOTYPE)
.setLazyInit(false)
.setAbstract(false)
.setDependencyCheck(AbstractBeanDefinition.DEPENDENCY_CHECK_ALL)
.getBeanDefinition();
最后,我向新创建的bean factory注册了它
beanFactory.registerBeanDefinition(beanName, beanDef);
然后过了一段时间,我想获得该bean的新实例,所以我做了:
Object beanInstance = beanFactory.getBean(jobType);
现在我希望用@Autowired
注释的字段被初始化。。但是没有。调用beanFactory.autowireBean(beanInstance)
没有帮助
在基本应用程序上下文中查找一些其他bean定义后,我可以看到我的definitoin没有任何属性,我可以通过调用beanDef.setAttribute()
来添加它们,但这需要我事先知道它们
现在提问。有没有一种方法可以通过编程方式创建完全初始化的bean定义,这样它就可以正确地自动连接?所以我发现了我缺少的东西:
AutowiredNotationBeanPostProcessor
需要将其添加到bean factory中,以启动@Autowired
和@Value
注释
同样对于@PostConstruct
和@PreDestroy
,您需要公共注释BeanPostProcessor
spring boot为应用程序上下文创建的Bean工厂总共有12个Bean后处理器,因此可能需要其他一些Bean后处理器来获得所有功能。检查这个答案:可能是重复的