当前位置 > it书童 > java > 正文
推荐小册
java高效编程
怎样更高效地用 java 编程

juc并发工具库
java并发编程工具库

设计模式
设计模式

jvm调优
jvm调优

rabbitmq实战
rabbitmq实战

redis实战
redis实战

Keepavlied高可用集群
Keepavlied高可用集群

nginx入门到实战
nginx入门到实战

java调试
java调试中遇到的各种坑

java输入输出流
java输入输出流

spring bean 对象的生命周期

java it书童 2020-08-19 11:47:29 0赞 0踩 702阅读 0评论

不同对象的生命周期不同,分为单例对象与多例对象

单例对象

出生:当容器创建时对象出生

活着:只要容器还在,对象一直活着

死亡:容器销毁,对象消亡

总结:单例对象的生命周期和容器相同

public class AccountServiceImpl implements IAccountService {
    public AccountServiceImpl() {
        System.out.println("对象创建了");
    }

    @Override
    public void saveAccount() {
        System.out.println("service 中的 saveAccount 方法执行了");
    }

    public void init() {
        System.out.println("对象初始化");
    }

    public void destroy() {
        System.out.println("对象销毁");
    }
}

配置 bean.xml

<bean id="accountService"
      class="com.itshutong.service.impl.AccountServiceImpl"
      scope="singleton"
      init-method="init"
      destroy-method="destroy" />

调用

ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
IAccountService as = (IAccountService) ac.getBean("accountService");
as.saveAccount();
// 手动关闭容器,触发 bean 对象的销毁方法
ac.close();

结果

多例对象

出生:当我们使用对象时spring框架为我们创建

活着:对象只要是在使用过程中就一直活着。

死亡:当对象长时间不用,且没有别的对象引用时,由Java的垃圾回收器回

将以上代码的配置文件改为多例对象

<bean id="accountService"
  class="com.itshutong.service.impl.AccountServiceImpl"
  scope="prototype"
  init-method="init"
  destroy-method="destroy" />

再次调用,发现即使容器关闭了,多例对象也不会被销毁。而是等待 java 的垃圾回收

关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/637/the-life-cycle-of-spring-bean-objects