spring-BeanFactoryPostProcessor
BeanFactoryPostProcessor 也是spring的一个扩展点,可以插手bean实例化的过程。
示例:
package com.test3; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.test3") public class AppConfig { }
package com.test3; import org.springframework.stereotype.Component; @Component public class Bean2 { }
package com.test3; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.stereotype.Component; @Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { BeanDefinition beanDefinition = configurableListableBeanFactory.getBeanDefinition("bean2"); beanDefinition.setScope("prototype"); } }
package com.test3; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class MyTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); System.out.println(context.getBean(Bean2.class)); System.out.println(context.getBean(Bean2.class)); } }
执行结果:
com.test3.Bean2@80ec1f8
com.test3.Bean2@1445d7f