1、NullPointerException
public class AliOSSUtils{
private AliOSSUtilsProperties aliOSSUtilsProperties;
// 报错!!!!!!!!!!!
String endpoint = aliOSSUtilsProperties.getEndpoint();
String accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
String accessSecret = aliOSSUtilsProperties.getAccessKeySecret();
String bucketName = aliOSSUtilsProperties.getBucketName();
}
在Java中,声明类的成员并在声明时直接赋值是合法的。
但在Spring Boot中,Bean的注入是在类实例化之后进行的,而不是在类定义之前。
当Spring容器实例化类的对象时,它会检查类的依赖项,并将相应的依赖项注入到类的成员变量中。
当在类的成员变量声明处直接使用aliOSSUtilsProperties
的属性访问方法时,可能会导致空指针异常。这是因为在该位置,aliOSSUtilsProperties
尚未被注入,因此其值为null
,无法调用其方法。
要解决这个问题,可以将对aliOSSUtilsProperties
属性的访问和初始化操作移动到方法内部或构造函数中。例如:
private AliOSSUtilsProperties aliOSSUtilsProperties;
private String endpoint;
private String accessKeyId;
private String accessSecret;
private String bucketName;
public void initializeProperties() {
endpoint = aliOSSUtilsProperties.getEndpoint();
accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
accessSecret = aliOSSUtilsProperties.getAccessKeySecret();
bucketName = aliOSSUtilsProperties.getBucketName();
}
或者,在构造函数中进行初始化:
private AliOSSUtilsProperties aliOSSUtilsProperties;
private String endpoint;
private String accessKeyId;
private String accessSecret;
private String bucketName;
public MyClass(AliOSSUtilsProperties aliOSSUtilsProperties) {
this.aliOSSUtilsProperties = aliOSSUtilsProperties;
endpoint = aliOSSUtilsProperties.getEndpoint();
accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
accessSecret = aliOSSUtilsProperties.getAccessKeySecret();
bucketName = aliOSSUtilsProperties.getBucketName();
}
这样,在实例化类的对象时,aliOSSUtilsProperties
会被正确注入,并且可以在方法或构造函数中访问它的属性。请确保在使用这些属性之前,aliOSSUtilsProperties
已经被正确注入,并且不为null
。
2、使用@AutoWired注入@Mapper警告报红
可以正常运行,报警告是因为AutoWired是Spring的注解它找不到它规定的那些容器,可以把AutoWired改成Resource,Resource是java自己的注解不会去找Bean