当我们有一个Spring托管的应用程序时,我们想让Spring管理所有的bean。 除了使用已知解决方案(例如带注释的bean,Java配置和XML配置)创建bean的常规方法之外,还有一种方法可以用来创建自己的BeanDefinition
。
使用BeanDefinitionRegistryPostProcessor
可以创建一个特定的后处理器,该处理器可以将BeanDefinition
添加到BeanDefinitionRegistry
。
它不同于BeanPostProcessor
,其中只有挂钩豆初始化(建设你的POJO的),其中BeanDefinitionRegistryPostProcessor
对钩BeanDefinitionRegistry
。 这使我们能够定义自己的BeanDefinition
。
首先,我们创建示例中列出的BeanDefinitionRegistryPostProcessor
实现。 我们实现了所需的方法,并将能够将我们自己的bean定义添加到注册表中。 定义的BeanDefinition
将由ApplicationContext
拾取,并将构造POJO。 我们的结果是一个Spring托管的bean
package com.jdriven;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.stereotype.Component;@Component
public class LogicServiceRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)throws BeansException {RootBeanDefinition beanDefinition = new RootBeanDefinition(MyServiceImpl.class); //The service implementationserviceDefinition.setTargetType(MyService.class); //The service interfaceserviceDefinition.setRole(BeanDefinition.ROLE_APPLICATION);registry.registerBeanDefinition("myBeanName", beanDefinition );}
}
翻译自: https://www.javacodegeeks.com/2015/04/spicy-spring-dynamically-create-your-own-beandefinition.html