首页 > 技术文章 > Spring扩展点

hzzhero 2017-09-07 21:56 原文

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());
        }

    }

}

 

推荐阅读