• @PostConstruct注解


    从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法 。写法有如下两种方式:

    @PostConstruct
    Public void someMethod() {}

    或者
    public @PostConstruct void someMethod(){}

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

    使用场景:在项目中主要是在Servlet初始化之前加载一些缓存数据等

    特点:

    1、只有一个非静态方法能使用此注解

    2、被注解的方法不得有任何参数

    3、被注解的方法返回值必须为void

    4、被注解方法不得抛出已检查异常

    5、此方法只会被执行一次

    servlet执行流程:

    其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

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

    被注解的Servlet生命周期
        需要注意的是,注解会多多少少地影响到服务器的启动速度。服务器在启动时候会遍历Web 应用的WEB-INF/classes下的所有class文件与WEB-INF/lib下的所有jar文件,以检查哪些类使用了注解。如果应用程序中没有 使用任何注解,可以在Web.xml中设置的metadata-complete属性为true.(支持@PostConstruct和 @PreDestroy的服务器需要支持Servlet2.5规范。Tomcat5.x仅支持Servlet2.4规范。)

    注:构造方法  ——> @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);
        }
    }
  • 相关阅读:
    tftp服务、串口工具minicom
    意外的“黄金点”
    软件工程实践总结
    关于 K米 —— 的案例分析
    关于git的学习
    第二次作业_需求分析与原型设计
    安装appium
    淘宝
    Selenium API基础 8种定位
    selenium
  • 原文地址:https://www.cnblogs.com/struggleVIP/p/13496514.html
Copyright © 2020-2023  润新知