@Value和@ConfigurationProperties的区别,以及@ConfigurationProperties的配置依赖

@Value@ConfigurationProperties都是Spring框架中用于注入配置属性的注解,但@Value@ConfigurationProperties都是Spring框架中用于注入配置属性的注解,但它们之间有一些区别:

1.来源不同:

  • @Value:用于从简单的属性文件中注入值,如application.properties或application.yml。
  • @ConfigurationProperties:用于从带有嵌套属性的复杂配置文件中注入值,如application.yml。

2.类型安全:

  • @Value:不支持类型安全,需要使用字符串拼接或者第三方库(如Apache Commons BeanUtils)进行类型转换。
  • @ConfigurationProperties:支持类型安全,通过自动绑定和类型转换实现。

3.复杂性:

  • @Value:适用于简单的属性注入场景。
  • @ConfigurationProperties:适用于复杂的配置文件场景,可以处理嵌套属性、列表、集合等。

4.自定义属性:

  • @Value:不支持自定义属性。
  • @ConfigurationProperties:支持自定义属性,可以通过prefixignoreInvalidFields等参数进行配置。

配置文件如下:

spring:
  #文件上传的配置
  servlet:
    multipart:
     max-file-size: 10MB
     max-request-size: 100MB
  #数据库连接信息
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tlias
    username: root
    password: chen

#Mybatis配置
mybatis:
  configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   map-underscore-to-camel-case: true

aliyun:
  oss:
    endpoint: https://oss-cn-hangzhou.aliyuncs.com
    accessKeyId: LTAI5tHmxxxxxxPbPg3Acs
    accessKeySecret: 5dywdOaBWzNsGXxxxxlias

使用@Value的注解方式:

@Component
public class AliOSSUtils {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

使用@ConfigurationProperties的方式注入:

首先配置依赖:


        
            org.springframework.boot
            spring-boot-configuration-processor
        

定义一个属性类:

@Data
@Component
@ConfigurationProperties(prefix = "aliyun-oss")
public class AliOSSUtilsProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

 说明一下,@Date是getter和setter方法的注入,也是需要引入相关的依赖的lambok

        
        
            org.projectlombok
            lombok
            true
        

 将私有化的属性对象,引入到相关类中:

@Component
public class AliOSSUtils {
    private AliOSSUtilsProperties aliOSSUtilsProperties;
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        String accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
        String bucketName = aliOSSUtilsProperties.getBucketName();
        String endpoint = aliOSSUtilsProperties.getEndpoint();
        String accessKeySecret = aliOSSUtilsProperties.getAccessKeySecret();
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

总的来说,@Value是引入较少的配置信息,而@ConfigurationPorperties是针对引入较多的依赖! 

完结,撒花!

你可能感兴趣的:(Javaweb,java,开发语言)