Spring中@PostConstruct注解的使用讲解

 更新时间:2023年11月02日 11:35:15   作者:梦想不会灭  
这篇文章主要介绍了Spring中@PostConstruct注解的使用讲解,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次,PostConstruct在构造函数之后执行,init()方法之前执行,PreDestroy()方法在destroy()方法之后执行,需要的朋友可以参考下

1、定义

从JavaEE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。

2、执行顺序及其使用场景

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法之后执行

在这里插入图片描述

从依赖注入的字面意思可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p和对象a,才能执行注入。

所以,如果一个类A中有个成员变量p被@Autowried或@Resource注解,那么成员变量p注入是发生在a的构造方法执行完之后的。

如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么这个初始化操作就无法在构造函数中实现。

这时,可以使用@PostConstruct 注解一个方法来完成初始化,被@PostConstruct注解的方法将会在依赖注入完成后被自动调用。 所以,@PostConstruct的执行顺序如下:

静态方法 >> Constructor >> @Autowired >> @PostConstruct

3、代码演示

我们知道:如果对象p注入到对象a,在服务启动时,会先执行p的构造方法,在执行a的构造方法。 那么如果对象p注入到对象a,且在对象p和对象a中都有@PostConstruct注解,那么在服务启动时,他的初始化顺序是什么呢,我们做个小测试,相关代码如下:

@Service
public class RoleService {

    static {
        System.out.println("RoleService static");
    }

    public RoleService(){
        System.out.println("RoleService Constructor");
    }

    @PostConstruct
    public void init(){
        System.out.println("RoleService PostConstruct");
    }

}
@Service
public class UserService {
    @Resource
    private RoleService roleService;

    static {
        System.out.println("UserService static");
    }

    public UserService(){
        System.out.println("userService Constructor");
    }

    @PostConstruct
    public void init(){
        System.out.println("UserService PostConstruct");
    }
    
}

我们可以看到,RoleService注入到了UserService中,我们启动程序,输出结果如下:

RoleService static
RoleService Constructor
RoleService PostConstruct
UserService static
userService Constructor
UserService PostConstruct

结论:

如果对象p注入到对象a,且在对象p和对象a中都有@PostConstruct注解,那么在服务启动时,他的初始化顺序是: p static -> p Constructor -> p PostConstruct -> a static -> a Constructor -> a PostConstruct

需要注意:

Spring有默认的类加载顺序 如果UserService注入到了RoleService,类加载顺序默认是先加载RoleService,所以它的执行顺序就是 RoleService static -> RoleService Constructor -> UserService static -> UserService Constructor -> UserService PostConstruct -> RoleService PostConstruct

到此这篇关于Spring中@PostConstruct注解的使用讲解的文章就介绍到这了,更多相关Spring中@PostConstruct注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中容器(顶层容器和中间容器)的布局管理器详解

    java中容器(顶层容器和中间容器)的布局管理器详解

    这篇文章主要介绍了java中容器(顶层容器和中间容器)的布局管理器详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 详解Java的Struts框架中上传文件和客户端验证的实现

    详解Java的Struts框架中上传文件和客户端验证的实现

    这篇文章主要介绍了Java的Struts框架中上传文件和客户端验证的实现,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Java使用flyway实现脚本自动化的方法详解

    Java使用flyway实现脚本自动化的方法详解

    Flyway是一个开源的数据库版本控制工具,主要用于管理数据库的版本和变更,它可以自动化地将数据库迁移到不同的版本,同时支持多种数据库类型,本文给大家介绍了如何使用flyway实现脚本自动化,需要的朋友可以参考下
    2023-10-10
  • java中多个@Scheduled定时器不执行的解决方法

    java中多个@Scheduled定时器不执行的解决方法

    在应用开发中经常需要一些周期性的操作,比如每5分钟执行某一操作等,这篇文章主要给大家介绍了关于java中多个@Scheduled定时器不执行的解决方法,需要的朋友可以参考下
    2023-04-04
  • Jrebel License Server 激活 IDEA-Jrebel-在线-离线-均适用(推荐)

    Jrebel License Server 激活 IDEA-Jrebel-在线-

    这篇文章主要介绍了Jrebel License Server 激活 IDEA-Jrebel-在线-离线-均适用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 如何将eclipse项目导入到idea的方法步骤(图文)

    如何将eclipse项目导入到idea的方法步骤(图文)

    这篇文章主要介绍了如何将eclipse项目导入到idea的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • MAC算法之消息摘要算法HmacMD5的实现

    MAC算法之消息摘要算法HmacMD5的实现

    这篇文章主要介绍了MAC算法之消息摘要算法HmacMD5的实现的相关资料,这里提供实例,帮助大家学习理解这部分知识,需要的朋友可以参考下
    2017-08-08
  • 关于springboot响应式编程整合webFlux的问题

    关于springboot响应式编程整合webFlux的问题

    在springboot2.x版本中提供了webFlux依赖模块,该模块有两种模型实现:一种是基于功能性端点的方式,另一种是基于SpringMVC注解方式,今天通过本文给大家介绍springboot响应式编程整合webFlux的问题,感兴趣的朋友一起看看吧
    2022-01-01
  • 利用Spring Social轻松搞定微信授权登录的方法示例

    利用Spring Social轻松搞定微信授权登录的方法示例

    这篇文章主要介绍了利用Spring Social轻松搞定微信授权登录的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 为什么Java是程序员受欢迎的语言这几个原因你该清楚

    为什么Java是程序员受欢迎的语言这几个原因你该清楚

    Java一直稳居程序员很受欢迎的编程语言的榜首,是企业中使用最广泛的编程语言。这篇文章主要介绍了为什么Java是程序员受欢迎的语言这几个原因你该清楚,需要的朋友可以参考下
    2020-07-07

最新评论