简介
@PostConstruct注解和@PreDestroy是两个作用于Servlet生命周期的方法注解,实现Bean初始化之前和销毁之前的自定义操作。
应用场景
@PostConstruct 主要用来容器初始化之前去初始化一些缓存或者配置等。
执行顺序及注意事项
一、执行顺序
@PostConstruct注解的方法执行在 构造方法之后 和servlet三个生命周期的方法(init()、service()、destory())之前。
二、使用注意事项
(1)方法注解
(2)同类中只有一个方法使用
(3)被注解方法不得有任何参数
(4)被注解方法返回值为void
(5)被注解方法不得抛出已检查异常
(6)不能注解静态方法。
示例
这里还去比较了实现InitializingBean接口和@PostConstruct注解的先后顺序
serviceBean.java
/**
* @author 夸克
* @create 2018/6/28 15:04
*/
@Data
@Slf4j
@Service
public class ServiceBean implements InitializingBean {
int a;
public ServiceBean() {
log.info("构造函数初始化了, a=" + a);
}
@PostConstruct
public void init () {
this.a = 20;
log.info("注解@PostConstruct的方法初始化了, a=" + a);
}
@Override
public void afterPropertiesSet() throws Exception {
this.a = 30;
log.info("InitializingBean接口方法初始化了, a="+ a);
}
}
测试类
/**
* @author 夸克
* @create 2018/6/28 14:59
*/
public class PostConstructTest extends BaseTest {
@Resource
private ServiceBean serviceBean;
@Test
public void test() {
System.out.println("");
}
}
运行结果
2018-06-28 20:21:56.976 INFO 30399 --- [ main] c.z.demo.zanbootdemo.domain.ServiceBean : 构造函数初始化了, a=0
2018-06-28 20:21:56.979 INFO 30399 --- [ main] c.z.demo.zanbootdemo.domain.ServiceBean : 注解@PostConstruct的方法初始化了, a=20
2018-06-28 20:21:56.980 INFO 30399 --- [ main] c.z.demo.zanbootdemo.domain.ServiceBean : InitializingBean接口方法初始化了, a=30
参考文章:https://blog.youkuaiyun.com/wo541075754/article/details/52174900