使用ImportBeanDefinitionRegistrar 的好处,
可以配合@import ,将功能作为可有可无的配置;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({RegisterSomeThing.class})
public @interface EnableJDRpc {
String[] basePackages() default "";
String namespace() default "phpserver";
String dataId() default "phpserver.yml";
}
click--------click
@Setter
@Getter
public class Person {
private String name;
private String age;
}
@Component
public class PersonBeanRegiser implements BeanFactoryAware {
private BeanFactory beanFactory;
@PostConstruct
public void register(){
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(Person.class);
builder.addPropertyValue("name", "张三");
builder.addPropertyValue("age", 20);
//重点
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) this.beanFactory;
registry.registerBeanDefinition("person", builder.getBeanDefinition());
}
/**
*
*/
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(PersonBeanRegiser.class);
Person person = ctx.getBean(Person.class);
System.out.println(person.getName());
}
}
BeanDefinitionRegistryPostProcessor实现动态添加到spring容器
BeanFactoryPostProcessor可以修改各个注册的Bean,BeanDefinitionRegistryPostProcessor可以动态将Bean注册
click