定義一個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