@PostConstruct注解详解

之前就有遇到过这个注解 大概用法也都知道 觉得他还挺好用的,今天详细对@PostConstruct注解做了一个了解,发现他的功能确实还蛮多

@PostConstruct注解详解_第1张图片

一、简介 

@PostConstruct 是一个Java注解,它在JSR 250标准中定义,通常用于在Java EE和Spring等框架中标记一个非静态的void返回类型的方法,该方法将在依赖注入完成之后被自动调用,以完成初始化的逻辑。

PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。应用 PostConstruct 注释的方法必须遵守以下所有标准:该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PostConstruct 的方法可以是 public、protected、package private 或 private;除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB.

二、使用场景

它通常用于需要在对象创建和依赖注入之后,但在对象被实际使用之前执行初始化逻辑的场景。

三、@PostConstruct的用法

如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

下面是一个简单的例子:

	import javax.annotation.PostConstruct;
 
public class MyBean {
 
   // 注入的依赖
   @Autowired
   private AnotherBean anotherBean;
 
   // 构造函数
   public MyBean() {
       // 构造函数的逻辑
   }
 
   // 初始化方法,依赖注入完成后调用
   @PostConstruct
   public void init() {
       // 初始化逻辑,比如配置验证、资源初始化等
       anotherBean.setup();
   }
}

在这个例子中,init 方法会在 MyBean 类的实例化以及 anotherBean 完成注入之后被调用。

请注意,@PostConstruct 注解并不是Spring特有的,它可以被任何遵守JSR 250标准的容器使用。然而,在使用Spring框架时,它通常与Spring的bean生命周期结合使用。

还有比如工作场景:

1.像我们在对接支付退款经常需要切换生产环境和测试这个时候就可以写一个初始化环境的方法 这样就不用看着这些冗余的代码发愁了

2.想有一些不多的数据 但是很多地方又有用到比如一些什么配置信息啥的 可以先加载到缓存中使用岂不是块很多


你可能感兴趣的:(java)