首先有如下代码
@ConfigurationProperties(prefix = "aliyun.oss")
public class FileUtils {
private static final String DIRECTORY = "D:/software/";
private static String endpoint ;
private static String accessKeyId;
private static String accessKeySecret ;
private static String bucketName ;
}
该代码引用了.properties中的key
aliyun.oss.endpoint = *****
aliyun.oss.accessKeyId = *****
aliyun.oss.accessKeySecret = *****
aliyun.oss.bucketName = *****
运行时报认证异常,如下:
com.aliyun.oss.common.auth.InvalidCredentialsException: Access key id should not be null or empty.
原因是由于@ConfigurationProperties不支持静态字段,解决问题将成员变量中的static去掉即可;
同时@ConfigurationProperties是通过getter/setter给成员变量赋值,不要忘记
但其中涉及到了Spring的依赖注入机制和反射机制,以下是我的总结性的理解:
在Spring的设计中,不鼓励将配置属性绑定到静态字段上(静态字段通常用于表示常量或者全局共享的状态)。Spring的依赖注入机制中,容器会创建一个类的实例,Spring可以通过反射来获得该实例,并对类的实例进行管理。而静态变量在类加载阶段就存在,属于类而不属于实例,不受容器管理,所以无法通过依赖注入给静态变量注入值。