Spring中的@PostConstruct注解使用详解
使用场景
我们在开发过程中会有这样的场景:需要在项目启动后执行一些操作,比如:读取配置文件信息,数据库连接,删除临时文件,清除缓存信息,工厂类初始化等。我们会有多种的实现方式,例如@PostConstruct 、CommandLineRunner、ApplicationRunner、ApplicationListener都可以实现在springboot启动后执行我们特定的逻辑,接下对比下他们的区别
@PostConstruct注解
该注解被用来修饰一个非静态的void方法,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。
触发时机
SpringBoot会把标记了Bean相关注解(例如@Component、@Service、@Repository等)的类或接口自动初始化全局的单一实例,如果标记了初始化顺序会按照用户标记的顺序,否则按照默认顺序初始化。在初始化的过程中,执行完一个Bean的构造方法后会执行该Bean的@PostConstruct方法(如果有),然后初始化下一个Bean。
spring中bean的创建过程
配置Bean(@Component、@Service、@Controller等注解配置) -----> 解析为Bean的元数据(Bean容器中的BeanDefinition对象) --> 根据Bean的元数据生成Bean(创建bean)
创建bean的时候执行顺序
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
程序使用实例
package com.wideth.config; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Slf4j @Component public class PostConstructConfig { @PostConstruct public void myPostConstruct(){ log.info("=============>>>myPostConstruct方法init"); } }
优缺点
优点
- 使用简单,在spring容器管理的类中添加此注解即可
缺点
- 在spring创建bean的时候触发,此时容器还未完全初始化完毕,如果逻辑中引用了还未完成初始化的bean会导致异常 ,所以需要考虑加载顺序。
- 如果@PostConstruct方法内的逻辑处理时间较长,就会增加SpringBoot应用初始化Bean的时间,进而增加应用启动的时间。因为只有在Bean初始化完成后,SpringBoot应用才会打开端口提供服务,所以在此之前,应用不可访问。
到此这篇关于Spring中的@PostConstruct注解使用详解的文章就介绍到这了,更多相关@PostConstruct注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring mvc Controller和RestFul原理解析
这篇文章主要介绍了Spring mvc Controller和RestFul原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-03-03Springboot2以代码的方式统一配置Jackson教程
这篇文章主要介绍了Springboot2以代码的方式统一配置Jackson教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11剖析Java中在Collection集合中使用contains和remove为什么要重写equals
这篇文章主要介绍了Collection集合的contains和remove方法详解remove以及相关的经验技巧,通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-09-09基于application和bootstrap的加载顺序及区别说明
这篇文章主要介绍了application和bootstrap的加载顺序及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07SpringCloud微服务之Hystrix组件实现服务熔断的方法
微服务架构特点就是多服务,多数据源,支撑系统应用。这样导致微服务之间存在依赖关系。这篇文章主要介绍了SpringCloud微服务之Hystrix组件实现服务熔断的方法,需要的朋友可以参考下2019-08-08Lombok注解之@SuperBuilder--解决无法builder父类属性问题
这篇文章主要介绍了Lombok注解之@SuperBuilder--解决无法builder父类属性问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-09-09
最新评论