Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring动态bean定义autowire_Java_Spring - Fatal编程技术网

Java Spring动态bean定义autowire

Java Spring动态bean定义autowire,java,spring,Java,Spring,因此,第一个简短的介绍: 我有一个工作的应用程序上下文,现在我想创建一个新的bean工厂,用一些动态bean定义扩展它。 因此,我创建了一个新的DefaultListableBeanFactory实例,将基本应用程序上下文作为父对象传递。 然后我创建了一个新的bean定义: BeanDefinition beanDef = BeanDefinitionBuilder.rootBeanDefinition(beanType)

因此,第一个简短的介绍: 我有一个工作的应用程序上下文,现在我想创建一个新的bean工厂,用一些动态bean定义扩展它。 因此,我创建了一个新的
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后处理器来获得所有功能。

检查这个答案:可能是重复的