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

简介: 了解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月前
|
XML 安全 Java
|
10天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
10天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
16天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
53 6
|
18天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
80 3
|
2月前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
1月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
34 1
|
3月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
85 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
4月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
349 24
|
4月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
283 18