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

相關文章
相關標籤/搜索