@PostConstruct注解是Java jdk提供的注解,可以点进注释看内部解释与使用
下引用中的内容为java中自带的解释
PostConstruct注释用于需要在依赖注入完成后执行任何初始化的方法上。这个方法必须在类投入服务之前调用。所有支持依赖注入的类都必须支持这个注释。带PostConstruct注释的方法必须被调用,即使类没有请求任何资源注入。只有一个方法可以使用此注释进行注释。PostConstruct注释应用的方法必须满足以下所有条件:
- 该方法不能有任何参数,除非在拦截器的情况下,在这种情况下,它接受一个由拦截器规范定义的InvocationContext对象。
- 在拦截器类上定义的方法必须具有以下签名之一:void < method >(InvocationContext) 对象(InvocationContext)抛出异常
注意:PostConstruct拦截器方法不能抛出应用程序异常,但如果相同的拦截器方法除了生命周期事件之外还插入了业务或超时方法,则可以声明它抛出检查异常,包括java.lang.Exception。如果PostConstruct拦截器方法返回一个值,它将被容器忽略。- 在非拦截器类上定义的方法必须具有以下签名:
– PostConstruct应用的方法可以是public、protected、package private或private。
– 除了应用程序客户端之外,该方法绝对不能是静态的。
– 方法可能是最终的。
– 如果该方法抛出未检查的异常,则该类绝对不能投入服务,除非EJB(应用组件)可以处理异常甚至从中恢复
下面个人理解简述,在各个类放入spring容器中达到控制反转后,在每次调用该包含该注解方法的类时候都会先执行该注解下的方法。在包含此注解的类初始化放入spring容器前是没执行,在依赖注入时候即使用@Autoware,@Resource时都还没使用,在使用此注解所在类时就会自动开始在方法使用前,先执行@PostConstruct修饰的方法,然后在执行正常调用的方法。
静态代码块 > 构造方法 > @PostConstruct > Servlet的init()方法