当前位置: 代码迷 >> 综合 >> @PostConstruct
  详细解决方案

@PostConstruct

热度:14   发布时间:2024-02-23 03:50:39.0

作用

@PostConstruct是Java自己的注解.
@PostConstruct该注解被用来修饰一个非静态的void()方法.
@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次.
@PostConstruct在构造函数之后执行,init()方法之前执行.

如果我们知道servlet的生命周期,就能很好的理解!

特点

  1. 只有一个非静态方法可以使用此注解
  2. 被注解的方法不得有任何参数
  3. 被注解的方法返回值必须为void
  4. 被注解的方法不得抛出已检查异常
  5. 被注解的方法只会被执行一次

servlet的生命周期

1、Web Client 向Servlet容器(Tomcat)发出Http请求

2、Servlet容器接收Web Client的请求

3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中

4、Servlet容器创建一个HttpResponse对象

5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象

6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息

7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据

8、Servlet容器把HttpServlet的响应结果传给Web Client

@PostContruct的使用场景

在项目中,我们经常需要初始化一些属性值,可以在整个项目中进行使用。有同学就说了,我们可以使用static关键字。但是,由于类的初始化顺序问题,我们是无法拿到需要的数据的,因为它是null。使用@PostContruct注解之后,是在servlet加载过程中进行初始化的,因此,我们才能更好的使用。

import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
import java.util.List;public class TestPostContruct {
    public static List list;@AutowiredBaseMapper   baseMapper;@PostConstructpublic void initData(){
    list = getData();}public List getData(){
    return baseMapper.getAll();}
}