SpringBoot使用@PostConstruct注解导入配置方式

 更新时间:2021年11月29日 14:31:25   作者:张志翔  
这篇文章主要介绍了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);
 } 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 快速了解JAVA中的Random()函数

    快速了解JAVA中的Random()函数

    这篇文章主要介绍了JAVA中的Random()函数的使用方法,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 详解Java中Array和ArrayList的比较和转换

    详解Java中Array和ArrayList的比较和转换

    在 Java 编程中,arrays 和 arraylists 都是基本的数据结构,用来存放数据集合,虽然两者的用途一样,但是它们的特点极大地影响应用的性能和灵活性,本文探讨 arrays 和 arraylists 的重要特性,它们各自的强项和弱点,,需要的朋友可以参考下
    2023-08-08
  • Java8 CompletableFuture 异步执行操作

    Java8 CompletableFuture 异步执行操作

    CompletableFuture是java8提供的基于异步操作的封装,日常开发中经常会用到,接下来通过本文给大家介绍Java8 CompletableFuture 异步执行操作,感兴趣的朋友一起看看吧
    2021-06-06
  • java设置session过期时间的实现方法

    java设置session过期时间的实现方法

    这篇文章主要介绍了java设置session过期时间的实现方法,以实例形式详细讲述了具体实现过程,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • Sa-Token不同模式实现单地登录 多地登录 同端互斥登录

    Sa-Token不同模式实现单地登录 多地登录 同端互斥登录

    这篇文章主要为大家介绍了Sa-Token不同模式实现单地登录 多地登录 同端互斥登录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 详解SpringBoot构建Docker镜像的3种方式

    详解SpringBoot构建Docker镜像的3种方式

    这篇文章主要介绍了SpringBoot构建Docker镜像的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java中线程休眠编程实例

    Java中线程休眠编程实例

    这篇文章主要介绍了Java中线程休眠编程实例,本文直接给出代码实例,并对休眠方法做了一番讲解,需要的朋友可以参考下
    2015-06-06
  • java打jar包的几种方式详解

    java打jar包的几种方式详解

    这篇文章主要介绍了java打jar包的几种方式,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot利用AOP实现一个日志管理详解

    SpringBoot利用AOP实现一个日志管理详解

    目前有这么个问题,有两个系统CSP和OMS,这俩系统共用的是同一套日志操作:Log;目前想区分下这俩系统的日志操作,那没办法了,只能重写一份Log的日志操作。本文就将利用AOP实现一个日志管理,需要的可以参考一下
    2022-09-09
  • Java编程Commons lang组件简介

    Java编程Commons lang组件简介

    这篇文章主要介绍了Java编程Commons lang组件的相关内容,十分具有参考意义,需要的朋友可以了解下。
    2017-09-09

最新评论