• @PostConstruct详解


    1、
    Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:
    @PostConstruct
    public void someMethod(){}
    或者
    public @PostConstruct void someMethod(){}

    被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行(这里的init()方法可以换成其他名称)。PreDestroy()方法在destroy()方法执行之后执行
    执行顺序:
    -------------------------------------------在这里插入图片描述-------------------------------------------
    2、spring中Constructor、@Autowired、@PostConstruct的顺序
    其实从依赖注入的字面意思就可以知道,**要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。**所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

    如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
    2.1 相同类中,Constructor(构造函数) >> @Autowired >> @PostConstruct

    举个栗子:
    public Class AAA {
    @Autowired
    private BBB b;

    public AAA() {
    System.out.println(“此时b还未被注入: b = " + b);
    }
    @PostConstruct
    private void init() {
    System.out.println(”@PostConstruct将在依赖注入完成后被自动调用: b = " + b);
    }
    }
    2.2 在类A中注入类B,调用顺序A构造方法->B构造方法->B @Autowired-> B @PostConstruct-> A @Autowired-> A @PostConstruct
    3、使用场景
    在项目中主要是在Servlet初始化之前加载一些缓存数据
    特点:
    1、只有一个非静态方法能使用此注解
    2、被注解的方法不得有任何参数
    3、被注解的方法返回值必须为void
    4、被注解方法不得抛出已检查异常
    5、此方法只会被执行一次
    6、除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。
    4、注意事项
    使用此注解时会影响服务启动时间。服务启动时会扫描WEB-INF/classes的所有文件和WEB-INF/lib下的所有jar包。

  • 相关阅读:
    新加坡国际学校年年IB成绩领先,到底有何优势?
    java计算机毕业设计美食推荐管理系统源码+系统+mysql数据库+lw文档
    独立站SEO文章怎么写?关键词布局你做对了吗
    VirtualLab Fusion中的参数耦合
    【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)
    对DataFrame的每行进行重塑每行的所有列和值都用单独一行显示stack()方法
    gdb.exe系统错误无法启动此程序,因为计算机丢失api-ms-win-core-path-l1-1-0.dll
    类和对象(上)
    《LeetCode热题100》笔记&题解&思路&技巧&优化_Part_1
    Docker使用过程中经常遇见的问题
  • 原文地址:https://blog.csdn.net/yangzhe19931117/article/details/128043477