@PostConstruct实现静态资源延迟初始化
@PostContruct
@PostContruct是spring框架的注解,在服务器加载Servlet的时候运行。执行顺序在构造方法之后,@Autowired @Value之后,init方法之前。
使用:
PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。
标准:
应用 PostConstruct 注释的方法必须遵守以下所有标准:
该方法不得有任何参数,除非是在 EJB 拦截器 (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有一个 InvocationContext 对象 ;该方法的返回类型必须为 void;该方法不得抛出已检查异常;应用 PostConstruct 的方法可以是 public、protected、package private 或 private;除了应用程序客户端之外,该方法不能是 static;该方法可以是 final;如果该方法抛出未检查异常,那么不得将类放入服务中,除非是能够处理异常并可从中恢复的 EJB。
https://www.cnblogs.com/YuyuanNo1/p/8184003.html
静态资源延迟初始化
由于@Autowired @Value注解加载在静态资源之后,静态资源无法使用@Autowired @Value注入的参数值进行初始化(静态代码块初始化)。使用@PostContruct可以延迟静态资源的初始化,在@Autowired @Value之后完成初始化操作。
代码:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
public class AccountCfgUtils {
//静态属性
public static String mosUsername;
public static String mosPassword;
//配置参数
@Value("${MOSUSERNAME}")
private String username;
@Value("${MOSPASSWORD}")
private String password;
public AccountCfgUtils() {
}
//静态资源加载
@PostConstruct
public void init(){
this.mosUsername=username;
this.mosPassword=password;
}
}
这个时候会在@Value注入值后再执行静态资源初始化。
附加
这一点和静态属性的set方法注值功能一样。如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AccountCfgUtils {
public static String mosUsername;
public static String mosPassword;
public AccountCfgUtils() {
}
@Value("${MOSUSERNAME}")
public void setMosUsername(String mosUsername) {
this.mosUsername = mosUsername;
}
@Value("${MOSPASSWORD}")
public void setMosPassword(String mosPassword) {
this.mosPassword = mosPassword;
}
}
上一篇: 如何优化网站?全程讲解优化一个网站的方法
下一篇: 项羽身陷齐国时,虞姬在哪里?她是什么结局