Spring@Value使用获取配置信息为null的操作

作者:CoderYin 时间:2021-08-01 23:46:27 

一、项目背景

1、介绍:

最近在springboot项目中需要做一个阿里云OSS图片上传功能点,将OSS图片上传代码提取到公共工具类中,为了方便其他模块调用。

2、问题介绍

在公共工具类中使用OSS一些自定义变量信息时会获取不到yml文件中定义的OSS参数。

3、问题分析

经过分析确定,公共工具类方法没有被spring 容器作为bean管理,所以获取不到配置文件信息。以前我们经常在controller层以及service层通过@Value获取配置文件信息,该层都被spring容器作为bean管理,所以可以轻松获取。

4、问题解决

新建一个参数获取类,使用@Component注解修饰类。

参见如下代码:

参数初始化:


@Component
public class AliyunOssConstants implements InitializingBean{
/**
 * 阿里云OSS地域节点
 */
@Value("${aliyunOss.file.endpoint}")
   private String endpoint;

/**
 * 阿里云OSSaccessKeyId
 */
   @Value("${aliyunOss.file.keyid}")
   private String accessKeyId;

/**
    * 阿里云OSSaccessKeySecret
    */
   @Value("${aliyunOss.file.keysecret}")
   private String accessKeySecret;

/**
    * 阿里云OSSbucket名称
    */
   @Value("${aliyunOss.file.bg.bucketname}")
   private String bg_bucketname;

/**
    * 阿里云OSSBucket域名
    */
   @Value("${aliyunOss.file.filehost}")
   private String filehost;    
   public  static  String SPRING_FILE_ENDPOINT;
   public  static  String SPRING_FILE_ACCESS_KEY_ID;
   public  static  String SPRING_FILE_ACCESS_KEY_SECRET;
   public  static  String SPRING_FILE_BG_BUCKET_NAME;
   public  static  String SPRING_FILE_FILE_HOST;

@Override
public void afterPropertiesSet() throws Exception {
 SPRING_FILE_ENDPOINT = endpoint;
 SPRING_FILE_ACCESS_KEY_ID = accessKeyId;
 SPRING_FILE_ACCESS_KEY_SECRET = accessKeySecret;
 SPRING_FILE_BG_BUCKET_NAME = bg_bucketname;
 SPRING_FILE_FILE_HOST = filehost;
}
}

使用参数:


@Slf4j
public class AliyunOSSUtil {
private static String endpoint=AliyunOssConstants.SPRING_FILE_ENDPOINT;
private static String accessKeyId=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_ID;
private static String accessKeySecret=AliyunOssConstants.SPRING_FILE_ACCESS_KEY_SECRET;
private static String bucketname=AliyunOssConstants.SPRING_FILE_BG_BUCKET_NAME;
private static String filehost=AliyunOssConstants.SPRING_FILE_FILE_HOST;
   // 阿里云OSS上传文件方法
}

@Value取不到值的原因

在springboot中想获取配置文件中的值,一般的方法为


@Value("${tag}")
private String tagValue;

但是取值时,有时这个tagvalue为NULL,可能原因有:

1.类没有加上@Component(或者@service等)


@Component //遗漏
class TestValue{
   @Value("${tag}")
   private String tagValue;
}

2.类被new新建了实例,而没有使用@Autowired


@Component
class TestValue{
   @Value("${tag}")
   private String tagValue;
}
class Test{
   ...
   TestValue testValue = new TestValue()

正确方式:

1.使用@Autowired注入

2.在controller层注值

来源:https://blog.csdn.net/CoderYin/article/details/90173118

标签:Spring,@Value,配置信息,null
0
投稿

猜你喜欢

  • Java 类加载机制详细介绍

    2023-12-19 13:55:59
  • Servlet注解之@WebInitParam多个InitParam的使用

    2023-08-04 13:43:01
  • Javassist如何操作Java 字节码

    2021-08-09 08:21:28
  • Java构建高效结果缓存方法示例

    2021-11-12 03:52:06
  • Intellij IDEA 最全超实用快捷键整理(长期更新)

    2022-07-15 02:37:48
  • Android 逆向学习详解及实例

    2022-12-26 08:51:50
  • c#设计模式之单例模式的实现方式

    2021-12-30 19:46:33
  • C++版本基于ros将文件夹中的图像转换为bag包

    2021-11-13 07:15:59
  • Android编程之TextView的字符过滤功能分析

    2023-05-19 20:23:36
  • Android开源项目PullToRefresh下拉刷新功能详解

    2022-02-02 15:14:54
  • 使用Spring Boot 2.x构建Web服务的详细代码

    2022-09-17 04:08:40
  • FrameLayout和Fragment处理Android应用UI布局实例

    2021-07-05 15:27:09
  • 初识Spring Boot框架之Spring Boot的自动配置

    2022-08-25 10:27:57
  • Android使用Gradle依赖配置compile、implementation与api的区别介绍

    2023-09-27 18:11:40
  • springboot中redis正确的使用详解

    2021-12-24 02:39:17
  • Netty分布式从recycler对象回收站获取对象过程剖析

    2021-08-12 06:45:48
  • Java 注解学习笔记

    2022-12-25 02:40:54
  • Mybatis实现数据的增删改查实例(CRUD)

    2022-05-29 07:03:50
  • springboot 集成redission 以及分布式锁的使用详解

    2023-06-20 06:48:43
  • 实例分析java开启线程的方法

    2022-06-24 19:54:00
  • asp之家 软件编程 m.aspxhome.com