宁波网站推广人,永信南昌网站建设,亿通网站建设,熬夜必备黄拦截Bean使用之前各个时机的Spring组件
之前使用过的BeanPostProcessor就是在Bean实例化之后#xff0c;注入属性值之前的时机。 Spring Bean的生命周期本次演示的是在Bean实例化之前的时机#xff0c;使用BeanFactoryPostProcessor进行验证#xff0c;以及在加载Bean之前进…拦截Bean使用之前各个时机的Spring组件
之前使用过的BeanPostProcessor就是在Bean实例化之后注入属性值之前的时机。 Spring Bean的生命周期本次演示的是在Bean实例化之前的时机使用BeanFactoryPostProcessor进行验证以及在加载Bean之前进行拦截的BeanDefinitionRegistryProcessor。
Bean被使用前的时机
声明、解析、实例化、注入属性值 解析Bean前——BeanDefinitionRegistryPostProcessor
/*** 在解析Bean之前对容器的信息进行拦截*/
Component
public class TestBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {/*** 执行加载Bean之前*/Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {// 可以手动的给容器注册BeanBeanDefinitionBuilder beanDefinitionBuilder BeanDefinitionBuilder.rootBeanDefinition(Banana.class);AbstractBeanDefinition beanDefinition beanDefinitionBuilder.getBeanDefinition();registry.registerBeanDefinition(myOrange, beanDefinition);}/*** 执行加载Bean之后*/Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {System.out.println(BeanDefinitionRegistryPostProcessor: beanFactory.getBean(myOrange, Banana.class));}
}实例化Bean前——BeanFactoryPostProcessor
/*** 在给每一个Bean实例化之前获取该容器*/
Component
public class TestBeanFactoryPostProcessor implements BeanFactoryPostProcessor {Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {// 根据name 获取相应的Bean对象// BeanDefinition beanDefinition beanFactory.getBeanDefinition();// 获取容器中bean的个数
// int beanDefinitionCount beanFactory.getBeanDefinitionCount();
// System.out.println(beanDefinitionCount: beanDefinitionCount);// 获取已经实例化的Bean
// String[] beanDefinitionNames beanFactory.getBeanDefinitionNames();
// for (String beanDefinitionName : beanDefinitionNames) {
// System.out.println(beanDefinitionName);
// }// 获取当前时机之前使用过的拦截器
// BeanFactory parentBeanFactory beanFactory.getParentBeanFactory();
// System.out.println(BeanFactoryPostProcessor ParentFactory: parentBeanFactory);System.out.println(BeanFactoryPostProcessor: beanFactory.getBean(myOrange, Banana.class));}
}测试代码
public static void configContext() {AnnotationConfigApplicationContext configContext new AnnotationConfigApplicationContext();// 测试BeanDefinitionRegistryPostProcessorconfigContext.register(BeanConfiguration.class);configContext.refresh();System.out.println(configContext: configContext.getBean(myOrange, Banana.class));}配置类
Configuration
Import({TestBeanDefinitionRegistryPostProcessor.class, TestBeanFactoryPostProcessor.class })
public class BeanConfiguration {
}结果