Spring扩展点
1 beanPostProcessor 该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。
有两个方法
// Bean 实例化之前进行的处理
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "开始实例化");
return bean;
}
// Bean 实例化之后进行的处理
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("对象" + beanName + "实例化完成");
return bean;
}
2 容器创建相关回调 BeanFactoryPostProcessor
@Component public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println(beanFactory.containsBean("user")); String [] strs=beanFactory.getSingletonNames(); for (String string : strs) { System.out.println(string); } } }
3 如何动态的向容器放入一个bean
@Component public class MydefinitionRegistery implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException { // TODO Auto-generated method stub } @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { for (int i=0;i<10;i++) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(User.class); builder.addPropertyValue("name", "HZZ"+i); builder.addPropertyValue("age", 15+i); builder.addPropertyValue("time", new Date()); registry.registerBeanDefinition("user——def"+i,builder.getBeanDefinition()); } } }