SpringBoot使用@PostConstruct注解导入配置方式
作者:张志翔
这篇文章主要介绍了SpringBoot使用@PostConstruct注解导入配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
使用@PostConstruct注解导入配置
通过@PostConstruct注解能够通过一种更友好的方式将配置进行导入
代码如下:
/**
* 引导类
*
* @author zhangzhixiang
* @date 2018/09/18 14:51:39
*/
@Configuration
public class BootstrapConsts {
@Value("${file.client.type}")
private String fileClientType;
@Value("${file.oss.endPoint}")
private String endPoint;
@Value("${file.oss.accessKeyId}")
private String accessKeyId;
@Value("${file.oss.accessKeySecret}")
private String accessKeySecret;
@Value("${file.oss.bucketName}")
private String bucketName;
@Value("${file.oss.rootDir}")
private String rootDir;
/**
* 文件客户端类型
*/
public static String file_client_type;
/**
* OSS地址(不同服务器,地址不同)
*/
public static String end_point;
/**
* OSS键id(去OSS控制台获取)
*/
public static String access_key_id;
/**
* OSS秘钥(去OSS控制台获取)
*/
public static String access_key_secret;
/**
* OSS桶名称(这个是自己创建bucket时候的命名)
*/
public static String bucket_name;
/**
* OSS根目录
*/
public static String root_dir;
@PostConstruct
private void initial() {
file_client_type = fileClientType;
end_point = endPoint;
access_key_id = accessKeyId;
access_key_secret = accessKeySecret;
bucket_name = bucketName;
root_dir = rootDir;
}
}
使用@PostConstruct注解,完成静态对象注入
为什么static对象不可直接使用@Autowired注入?
Spring/SpringBoot正常情况下不能支持注入静态属性(会报空指针异常)。主要原因在于:Spring的依赖注入实际上是使用Object.Set()进行注入的,Spring是基于对象层面的依赖注入,而静态属性/静态变量实际上是属于类的。
@PostConstruct和@PreDestroy
@PostConstruct为JavaEE5规范开始后Servlet中新增@PostConstruct和@PreDestroy被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。@PostConstruct 在构造函数之后执行,init()方法之前执行。@PreDestroy()方法在destroy()方法之后执行
执行顺序:Constructor >> @Autowired >> @PostConstruct
使用示例
package com.sijing.codeRecord.httpUtil;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;
@Component
public class HttpStaticUtil {
@Autowired
RestTemplate restTemplate;
private static RestTemplate staticRestTemplate;
@SuppressWarnings("static-access")
@PostConstruct
public void staticVarAssignment() {
this.staticRestTemplate = restTemplate;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void Post() {
HttpEntity requestEntity = null;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.valueOf("application/json"));
requestEntity = new HttpEntity(String.format(""), headers);
JSONObject response = staticRestTemplate.postForObject("http://www.baidu.com", requestEntity, JSONObject.class);
System.out.println(response);
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- springboot中@PostConstruct注解使用小结
- SpringBoot中@PostConstruct 注解的实现
- springboot启动加载CommandLineRunner @PostConstruct问题
- SpringBoot中的@PostConstruct注解详细解析
- springboot @PostConstruct无效的解决
- 浅谈SpringBoot中的Bean初始化方法 @PostConstruct
- SpringBoot @PostConstruct和@PreDestroy的使用说明
- SpringBoot @PostConstruct原理用法解析
- SpringBoot中多个PostConstruct注解执行顺序控制
