程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

bean的生命周期

发布于2021-03-10 19:16     阅读(1369)     评论(0)     点赞(10)     收藏(1)


原文链接http://zhhll.icu/2021/01/03/%E6%A1%86%E6%9E%B6/spring/bean%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/

bean的生命周期

  • bean的构造
  • 调用set方法设置Bean的属性
  • 调用BeanNameAware的setBeanName()方法
  • 调用BeanFactoryAware的setBeanFactory()方法
  • 调用BeanPostProcessor的postProcessBeforeInitialization()方法
  • 调用InitializingBean的afterPropertiesSet()方法,需要bean实现InitializingBean
  • 调用自定义的初始化方法(init-method属性指定该方法)
  • 调用BeanPostProcessor类的postProcessAfterInitialization()方法
  • 调用DisposableBean的destory()方法,需要bean实现DisposableBean
  • 调用自定义的销毁方法(destory-method属性指定该方法)

bean的后置处理器

spring提供了两种后置处理器

  • Bean后置处理器 对容器中Bean进行后处理,对Bean进行额外加强
  • 容器后置处理器 对IOC容器进行处理,增强容器功能

Bean后置处理器

Bean后置处理器是一种特殊的Bean,这种特殊的Bean并不对外服务,主要负责对容器中的其他Bean执行后处理,例如容器中的目标Bean生成代理等。Bean后处理器会在Bean实例创建成功后,为Bean实例进行进一步的增强处理。实现BeanPostProcessor接口,实现postProcessAfterInitialization和postProcessBeforeInitialization方法。

public class MyProcessor implements BeanPostProcessor {

    /**
     * 初始化之前
     * @param o
     * @param s
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        if(o instanceof Connection){
            System.out.println("初始化之前");
        }
        return o;
    }

    /**
     * 初始化之后
     * @param o
     * @param s
     * @return
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        if(o instanceof Connection){
            System.out.println("初始化之后");
        }
        return o;
    }
}

这里处理完之后一定要将bean返回回去,否则后续无法获取到bean

注:如果使用BeanFactory作为Spring容器,则必须手动注册Bean后置处理器,程序必须获取Bean后置处理器实例,然后手动注册。

BeanPostProcessor bp = (BeanPostProcessor)beanFactory.getBean("bp");
beanFactory.addBeanPostProcessor(bp);
Person p = (Person)beanFactory.getBean("person");

容器后置处理器

容器后置处理器负责容器本身,实现BeanFactoryPostProcessor接口,实现接口的postProcessBeanFactory方法对Spring容器进行处理,可以对Spring容器进行自定义扩展,

在BeanFactory标准初始化之后调用,即所有的BeanDefinition已经保存加载到beanFactory中,但是bean的实例还未创建

public interface BeanFactoryPostProcessor {

   void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

}

由于本身的博客百度没有收录,博客地址http://zhhll.icu



所属网站分类: 技术文章 > 博客

作者:忽明忽灭

链接:http://www.javaheidong.com/blog/article/112374/d5dd1ebf85ad89b0fda1/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)