Spring-IOC学习笔记-06bean的生命周期

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-IOC学习笔记-06bean的生命周期相关的知识,希望对你有一定的参考价值。

bean的生命周期

生命周期就是bean的实例在IOC容器中从创建到销毁的过程

在spring中bean的生命周期很复杂,但是可以简单的理解为以下周期:

  • 实例化
  • 注入属性
  • 调用实现接口方法
  • 初始化
  • 就绪
  • 销毁

在这里插入图片描述

8.1 自定义初始化方法

在配置文件中,可以在bean的属性配置中使用init-method来指定自定义的初始化方法

比如在实体类中添加了以下方法:

private void init(){
System.out.println("custom-init");
}

那么就可以在配置文件中去指定该方法为初始化方法

<bean id="man" class="com.moon.entity.FierceMan" init-method="init"/>

8.2 自定义销毁方法

销毁方法的自定义和初始化的一样

在实体类添加以下销毁方法:

private void destroy(){
System.out.println("custom-destroy");
}

在配置文件中配置:

<bean id="man" class="com.moon.entity.FierceMan" destroy-method="destroy"/>

8.3 BeanPostProcessor的实现

如果实现了该接口,那么在容器初始化bean的前后会调用BeanPostProcessor的对应方法

实现自己的BeanPostProcessor

public class MyBeanPostProcessor implements BeanPostProcessor {
    
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        // 只判断bean的类型为FierceMan
        if (bean instanceof FierceMan) {
            System.out.println("BeanPostProcessor之前");
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof FierceMan) {
            System.out.println("BeanPostProcessor之后");
        }
        return bean;
    }
}

在配置文件中配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
  <!--bean-->
  <bean id="man" class="com.moon.entity.FierceMan" init-method="init" destroy-method="destroy"/>
  <!--BeanPostProcessor-->
  <bean id="beanPostProcessor" class="com.moon.entity.MyBeanPostProcessor"/>
</beans>

结果

在这里插入图片描述

以上是关于Spring-IOC学习笔记-06bean的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Spring-IOC学习笔记-02基于XML创建Bean

Spring-IOC学习笔记-08基于JavaConfig开发

Spring-IOC学习笔记-04扩展命名空间

Spring-IOC学习笔记-07基于注解开发

在学习spring-IoC容器装配Bean_基于注解配置方式的时候,碰见的两个异常

在学习spring-IoC容器装配Bean_基于注解配置方式的时候,碰见的两个异常