JavaEE 5引入了2个作用于Servlet生命周期的注解:@PostConstruct@PreDestroy,通过这两个注解可以实现Bean初始化之前和销毁之前的自定义操作。

Servlet执行流程图

ServletLifeCycle.png

@PostConstruct的使用说明

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

  • 只有一个方法可以使用此注释进行注解;
  • 被注解方法不得有任何参数;
  • 被注解方法返回值为void
  • 被注解方法不得抛出已检查异常;
  • 被注解方法需是非静态方法;
  • 此方法只会被执行一次
  • Spring依赖注入的顺序:Constructor >> @Autowired >> @PostConstruct

举例如下:

@Service
public BizService {
    @Autowired
    private ModelDao modelDao;

    public BizService () {
        System.out.println("Constructor调用");
    }

    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct在依赖注入完成后调用:ModelDao=" + modelDao);
    }
}

@PreDestroy的使用说明

@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servletdestroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

参考文章

注解@PostConstruct与@PreDestroy详解及实例

标签: java

添加新评论