SpringBean的生命周期

图解

 

实例化(Instantiation):

spring启动后,会查找和加载需要被spring管理的Bean,并且实例化.

一般有BeanFactoryApplicationCoutext两大Spring的核心接口实现

public class Student implements InitializingBean {
    private String msg;


    public Student() {
        System.out.println("Student创建了......实例化");
    }
    public Student(String msg) {
        this.msg = msg;
    }

    public void setMsg(String msg) {
    }
}

属性赋值:即注入对象依赖的属性值(对象)

     实例化后,Bean被封装在BeanWrapper中,Spring会根据BeanDefinition中的信息进行依赖注入。并且会根据通过BeanWrapper通过接口的属性完成依赖注入

<bean id="student" class="com.apesource.pojo.Student">
        <!--属性赋值-->
        <property name="msg" value="西安"></property>
    </bean>
public class Student implements InitializingBean {
    private String msg;


    public Student() {
      
    }
    public Student(String msg) {
        this.msg = msg;
        System.out.println("Student的属性赋值");
    }

    public void setMsg(String msg) {
    }
}

处理各种aware接口: Spring会检测该对象是了xxxAware接口,并将相关实例注入给Bean。

如果Bean实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
如果Bean实现BeanClassLoaderAware接口,会调用setBeanClassLoader( )方法,注入ClassLoader对象的实例
如果Bean实现BeanFactoryAware接口,会调用它实现的setBeanFactory( )方法,注入的是Spring方法
如果BeanApplicationContextAware接口,会调用setApplicationContext( )方法,注入Spring的上下文

执行BeanPostProcessor的前置处理

<bean class="com.apesource.processor.MyBeanPostProcessor"></bean>

实现BeanPostProcessor接口

public class MyBeanPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor中的Before方法======》");
        return bean;
    }
}

执行initializingBean系统初始化方法

初始化 Bean,对各项属性赋初始化值。初始化前后执行 BeanPostProcessor,实现initializingBean接口

public class Student implements InitializingBean {
    private String msg;


    public Student() {
        
    }
    public Student(String msg) {
        this.msg = msg;
           
    }
   
    public void afterPropertiesSet() throws Exception {
        System.out.println("Student系统初始化");
    }

    public void setMsg(String msg) {
    }
}

i执行nit-method自定义初始化

 init-method 用于在Bean初始化时指定执行方法,用来替代继承 InitializingBean接口。只有一个类完整的实例被创建出来后,才能走初始化方法。

    <bean class="com.apesource.processor.MyBranFactory" init-method="init" </bean>
public class Student implements InitializingBean {
    private String msg;


    public Student() {
    
    }
    public Student(String msg) {
        this.msg = msg;
     
    //自定义初始化
    public void doinit(){
        System.out.println("Student初始化1");
    }

   

    public void setMsg(String msg) {
    }
}

执行BeanPostProcessor的后置处理

实现BeanPostProcessor接口

public class MyBeanPostProcessor implements BeanPostProcessor {
   

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("BeanPostProcessor中的After方法--------->");
        return bean ;
    }
}

操作使用(以上步骤后,表示bean成功创建,可以正常使用)

执行DisposableBean 系统销毁

容器关闭后,如果 Bean 实现了 DisposableBean 接口,则会回调该接口的 destory()方法

public class Student implements InitializingBean {
    private String msg;


    public Student() {
      
    }
    public Student(String msg) {
        this.msg = msg;
       }

    public void setMsg(String msg) {
    }
    public void destory(){
         System.out.println("Student销毁了");
}
}

配置了destroy-method 方法自定义销毁

destroy-method 方法,则会执行 destroy-method 配置的方法,实施bean工厂的自定义销毁

    <bean class="com.apesource.processor.MyBranFactory"  destroy-method="desoyr"></bean>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值