欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

@PostConstruct实现静态资源延迟初始化

程序员文章站 2022-05-25 08:03:32
...

@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;
    }
}

相关标签: @PostConstruct