Spring基础-BeanDefinitionRegistryPostProcessor实现动态添加到spring容器

定义一个beanspring

public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" +
                "name='" + name + '\'' +
                '}'; } }

而后实现BeanDefinitionRegistryPostProcessor app

@Component public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { for (int i = 0; i < 10; i++) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(Person.class); builder.addPropertyValue("name", "sfz_" + i); registry.registerBeanDefinition("person" + i, builder.getBeanDefinition()); } } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } }

这样就能够动态注入ide

public class App4 { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.fz.song.four"); context.getBeansOfType(Person.class).values().forEach(System.out::println); context.close(); } }

第二种方式post

public class App4 { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.fz.song.four"); BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(Person.class); builder.addPropertyValue("name","songfazhun"); context.registerBeanDefinition("Person_app",builder.getBeanDefinition()); context.getBeansOfType(Person.class).values().forEach(System.out::println); context.close(); } }

 

 

顺便提一提BeanFactoryPostProcessorui

@Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { int beanDefinitionCount = beanFactory.getBeanDefinitionCount(); System.out.println("beanDefinitionCount = " + beanDefinitionCount); } }

这个是在spring容器初始化的时候调用的this

相关文章
相关标签/搜索