Spring基础篇:了解Bean的生命周期及生命周期函数

例子

创建一个Person,当初始化该类的时候,将其成员变量Hp赋值:100;当销毁该类的对象时,将Hp减:100。

Bean的生命周期

Spring管理的Bean有5个生命周期阶段

  1. 创建阶段
  2. 初始化阶段
  3. 运行期
  4. 销毁阶段
  5. 回收阶段

其中,初始化阶段销毁阶段,我们需要着重关注,因为Spring给我们提供可以对着两个阶段的控制方法,下面了解一下如何在这两个生命周期阶段进行一些操作。

初始化工作

Person类

public class Person {
    private String name = null;
    private Integer Hp = 0;

    public void addHp(){
        this.Hp = 100;
    }

    public void reduceHp(){
        this.Hp -= 100;
    }
    
    //setter and getter and toString
}

期望:在Bean初始化的时候执行的是addHp;Bean被销毁的时候执行reduceHp

配置类

@Configuration
public class BeanLifeConfig {
}

XML的方式

第一步:在XML文件中注册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">
    <bean id="person" class="juejin.beanLife.xml.bean.Person"></bean>
</beans>

第二步:在<bean>标签中设置 初始化方法和销毁方法

<bean id="person" class="juejin.beanLife.xml.bean.Person" init-method="addHp" destroy-method="reduceHp"></bean>

其实很简单,在<bean>标签中,含有两个属性

  • init-method:指定初始化执行什么方法
  • destroy-method:指定bean销毁执行什么方法

第三步:配置类导入已有的XML配置

使用@ImportResource注解,内容放在resources目录中的.xml文件路径

@Configuration
@ImportResource("juejin/beanLife/BeanLife.xml")
public class BeanLifeConfig {
}

启动类,测试

被Spring管理的Bean会和容器一块加载,所以当容器加载时,初始化方法自动执行,这时候我们拿出对应的Bean看其Hp

public class XMLApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanLifeConfig.class);
        // 被Spring管理的Bean会和容器一块加载,所以当容器加载时,初始化方法自动执行,这时候我们拿出对应的Bean看其Hp
        Person bean = ctx.getBean(Person.class);
        System.out.println(bean.getHp());
    }

输出结果:100

销毁的测试,我们需要在Person类的销毁方法中,做点手脚,看我的操作:

public void reduceHp(){
    this.Hp -= 100;
    System.out.println("Hp被灭啦");
}

这是因为,需要通过关闭容器去测试Bean的销毁动作,而容器都关闭了,就不可能通过容器GetBean了。现在我们关闭容器看结果

// 在启动类中最后加上这句话
ctx.close();

输出结果:Hp被灭啦

注解的方式

注解方式一:以@Bean的方式注入

注解简单粗暴,我就快速说啦!简单的步骤就略过啦
首先你需要:

  1. 在Bean上使用@Component注解。
  2. 在配置类中使用@Bean注入。
  3. 这是最核心的步骤,在@bean中使用其initMethoddestroyMethod属性指明初始化方法和销毁方法。
@Bean(initMethod = "addHp",destroyMethod = "reduceHp")
public Person person(){
    return new Person();
}

测试类和XML的代码一样啦。

注解方式二:在Bean上使用@PostConstruct注解 和 @PreDestroy注解

@Component
public class Person {
    private String name = null;
    private Integer Hp = 0;

    @PostConstruct
    public void addHp(){
        this.Hp = 100;
    }

    @PreDestroy
    public void reduceHp(){
        this.Hp -= 100;
        System.out.println("Hp被灭啦");
    }
    
    //getter setter and toString

其他的,配置类使用扫描包的方式即可,启动类和之前一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值