Servlet annotation PostConstruct 应用原理及注意事项
特别说明
当前文章内容迁移中,如有问题,请提交 issues 谢谢 ~~
背景
JavaEE 5 中引入此注解。用来修饰非静态 void 方法。在服务器加载 Servlet 时运行,并且只会被服务器执行一次。
工作原理
执行的时间节点:
- 开始
- web 加载 servlet 容器。
- Servlet 构造函数
- PostConstruct 注解方法
- init() 方法
- Service() 方法
- destory() 方法
- PreDestroy 注解方法
- 结束。
应用场景
- 在生成对象时完成某些初始化操作,而浙西初始化操作又依赖于 依赖注入,无法在构造函数中实现。
@PostConstruct 注解的方法将会在依赖注入完成后被自动调用
注意事项
- 注解发生于应用初始化。
- 不可加载耗时操作。
应用注意事项
1. @PostConstruct 不可与 @Component 共用。@Component 需改为 @Service,否则会导致 @PostConstruct 会初始化两次
问题并不是 @PostConstruct 造成的,而是 @Component 造成的。在 web.xml 中的 DispatcherServlet 继承自 ContextLoaderListener,两者共用 ApplicationContext,但是在启动的时候,会分别调用 initWebApplicationContext() 方法,各自对 @Component 注解对象实例化一次,DispatcherServlet 调用在后,在 Controller 中使用的是后面实例化的对象
