从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法 。
1.@PostConstruct说明
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
类似于Serclet的inti()方法。
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
2.@PreDestroy说明
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。会在destroy()方法执行之后执行,在Servlet被彻底卸载之前。
Eureka中的使用示例:
@PostConstruct
@Override
public void initialize() {
logger.info("Initializing ...");
peerEurekaNodes.start();
try {
registry.init(peerEurekaNodes);
} catch (Exception e) {
throw new RuntimeException(e);
}
logger.info("Initialized");
}
@PreDestroy
@Override
public void shutdown() {
logger.info("Shutting down ...");
registry.shutdown();
peerEurekaNodes.shutdown();
logger.info("Shut down");
}
工作流中的使用示例:
//在 流程核心初始化类 生成前将数据源注入,实现。
@Bean
public EchainInitializer yuspEchainBean(DataSource dataSource) {
Const.echainstudiopath = echainstudiopath;
return new EchainInitializer(dataSource);
}
//一个内部类利用构造先执行的特征将初始化好的流程核心初始化类传入。
@Configuration
public class EchainInit {
private EchainInitializer yuspEchainBean;
public EchainInit(EchainInitializer yuspEchainBean) {
this.yuspEchainBean = yuspEchainBean;
}
//在通过构造获得已经初始化好的流程核心初始化类之后,调用类中的初始化方法去执行相关初始化操作。
@PostConstruct
public void initEchain() {
yuspEchainBean.init();
}
}
写法有如下两种方式:
@PostConstruct
Public void someMethod() {}
或者
public @PostConstruct void someMethod(){}