最近看到这个注解,感觉网上很多只是简单的说了下执行顺序,但其实还是有很多关注的点。为了方便学习,做如下总结。
重点关注
根据jdk源码注释解读,本注解的主要作用是
- 用来执行依赖注入之后的初始化操作
- 注解用来作用于方法
- 每个类可以有多个标注的方法按顺序执行 每个只会执行一次
- 本注解必须被所有能依赖注入的类所支持
- 方法必须是无参方法 (除非声明为拦截器方法)
- 方法最好不是静态方法
- 方法可以是final修饰
本方法的执行顺序
根据执行顺序可以知道,被本注解修饰的方法可以在依赖注入后声明一些初始化的参数,并且只会被执行一次。
简单示例
// 首先声明一个鸡类
@Data
public class Chicken {
private String name ;
}
// 将他注入容器
@Configuration
public class UserConfig {
@Bean
public Chicken putUser(){
Chicken chinken = new Chicken();
chinken.setName("吮指鸡块");
return chinken;
}
}
// 在family 类中调用 注入chinken
@Component
public class Family {
@Resource
Chicken chicken;
public static List<String> names;
@PostConstruct
public void init(){
names.add(chicken.getName());
System.out.println("已添加肯德基全家桶豪华套餐");
}
public Family() {
names = new LinkedList<>();
}
}
在上面的示例中,我们需要在初始化时将chiken的name放入names中,但是在构造方法中是无法实现的,因为构造方法执行时,chiken = null 因此@PostConstruct就派上了用场