作用
@PostConstruct是Java自己的注解.
@PostConstruct该注解被用来修饰一个非静态的void()方法.
@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次.
@PostConstruct在构造函数之后执行,init()方法之前执行.
如果我们知道servlet的生命周期,就能很好的理解!
特点
- 只有一个非静态方法可以使用此注解
- 被注解的方法不得有任何参数
- 被注解的方法返回值必须为void
- 被注解的方法不得抛出已检查异常
- 被注解的方法只会被执行一次
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();}
}