Spring Boot 2.x实战6 - Spring 5.x基础4 - Bean的生命周期

2.6 Bean的生命周期

2.6.1 初始化和销毁

我们可以对Bean在容器中的初始化和销毁行为进行定制。

  • 注解配置:使用@PostConstruct@PreDestroy

    @Service
    public class LifeService {
    
        public LifeService() {
            System.out.println("正在构造");
        }
    
        @PostConstruct
        public void exeAfterConstruct(){
            System.out.println("在构造完成后执行");
        }
    
        @PreDestroy
        public void exeBeforeDestroy(){
            System.out.println("在销毁之前执行");
        }
    }
    

    执行效果为:
    在这里插入图片描述

  • Java配置:使用@BeaninitMethoddestroyMethod

Bean的定义为:

public class LifeService2 {
    public LifeService2() {
        System.out.println("LifeService2:正在构造");
    }

    public void exeAfterConstruct(){
        System.out.println("LifeService2:在构造完成后执行");
    }

    public void exeBeforeDestroy(){
        System.out.println("LifeService2:在销毁之前执行");
    }
}

JavaConfig中配置:

@Bean(initMethod = "exeAfterConstruct", destroyMethod = "exeBeforeDestroy")
public LifeService2 lifeService2(){
    return new LifeService2();
}

效果如下:
在这里插入图片描述

2.6.2 延迟初始化 - @Lazy

只要我们给Bean上注解了@Lazy,Bean只有在被调用的时候才会被初始化。它可以和@Component类注解或@Bean一起使用。如:

@Service
@Lazy
public class LifeService {}
@Bean(initMethod = "exeAfterConstruct", destroyMethod = "exeBeforeDestroy")
@Lazy
public LifeService2 lifeService2(){}

因为这两个Bean没有被调用过,所以没有被初始化,此时控制台没有任何输出。

2.6.3 依赖顺序 - @DependsOn

我们设置Bean lifeService2依赖于lifeService,让lifeService先初始化,我们可以用@DependsOn来实现。

@Bean(initMethod = "exeAfterConstruct", destroyMethod = "exeBeforeDestroy")
@DependsOn("lifeService")
public LifeService2 lifeService2(){
	return new LifeService2();
}

执行的结果是lifeService先于lifeService2初始化:
在这里插入图片描述
新书推荐:
我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html

扫描二维码关注公众号,回复: 11119572 查看本文章

在这里插入图片描述
主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

发布了116 篇原创文章 · 获赞 10 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/105733458