当前位置: 首页 > news >正文

映射阿里云OSS(对象存储服务)

参考:使用阿里云进行OSS对象存储(超详细)

一文掌握SpringBoot注解之@Component 知识文集(1)

@ConfigurationProperties注解原理与实战

1.配置属性类 AliOssProperties

package com.sky.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "sky.alioss") // 绑定配置文件前缀
@Data // Lombok自动生成getter/setter
public class AliOssProperties {private String endpoint;        // OSS访问域名private String accessKeyId;     // 访问密钥IDprivate String accessKeySecret; // 访问密钥private String bucketName;      // 存储桶名称
}

作用:从配置文件(如application.yml)读取阿里云OSS配置参数。

  alioss:endpoint: oss-cn-shenzhen.aliyuncs.comaccess-key-id: LTAI5tNeccJwteJtxpa3Xtajaccess-key-secret: rLRhmNUzAT8JPaCczOwDGvQmmdw2rkbucket-name: bucket-pl

2.自动配置类 OssConfiguration

package com.sky.config;import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Slf4j
public class OssConfiguration {@Bean@ConditionalOnMissingBean // 容器不存在AliOssUtil时生效public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {log.info("创建阿里云OSS工具对象,配置参数:{}", aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());}
}

作用

  1. 自动将AliOssProperties注入工具类构造器

  2. 创建AliOssUtil的Spring Bean

  3. @ConditionalOnMissingBean确保当用户未自定义该Bean时才创建默认实例

3. 工作原理

  1. 属性注入
    Spring Boot自动将application.yml中以sky.alioss开头的配置映射到AliOssProperties对象。

  2. Bean创建
    当Spring容器启动时:

    • 检测到@Configuration注解,执行配置类逻辑

    • 通过构造器参数自动注入AliOssProperties

    • 使用配置参数实例化AliOssUtil

  3. 条件装配
    如果项目其他地方已定义AliOssUtil(如自定义配置),则跳过默认创建。

4. 使用示例

在Service中直接注入使用:

@Service
public class UploadService {@Autowiredprivate AliOssUtil ossUtil; // 自动注入工具类public void uploadFile(MultipartFile file) {String url = ossUtil.upload(file); // 调用OSS上传方法// ...}
}

5. 优势

  • 解耦配置:敏感信息(密钥等)与代码分离

  • 集中管理:所有OSS配置统一在yml文件中维护

  • 灵活扩展:支持自定义Bean覆盖默认实现

  • 启动可视化:日志打印配置参数便于调试

提示:需要确保AliOssUtil类存在且包含匹配的构造方法,其实现应基于阿里云OSS SDK(需额外添加依赖com.aliyun.oss:aliyun-sdk-oss)。

核心注解说明

@Component
 

作用:它的作用是将一个 Java 类标识为 Spring 的组件(Bean)。

被 @Component 注解标注的类会被 Spring 自动扫描并注册到应用上下文中,可以通过应用上下文获取并使用这些组件。

具体来说,@Component 注解可以用于标记任何一个普通的 Java 类,并将其纳入 Spring 管理。这样,它们就可以享受到 Spring 提供的各种依赖注入、自动装配、AOP 等特性。

需要注意的是,@Component 注解通常作为其他更具体的注解(如 @Service、@Repository、@Controller 等)的基础,用于创建具有特定用途的组件。

但是,@Component 注解本身并没有明确定义 Bean 的角色或用途。

总结来说,@Component 注解的作用是将一个 Java 类标识为 Spring 组件(Bean),使其纳入 Spring 的管理与控制范围,可以享受到 Spring 提供的各种特性和便利。

以下是一些常用的注解及其用途:

1.@Service:用于标记服务层(Service),相当于早期的 Service 实现类上方也有一个 @Service 注解,用于告诉 Spring 容器,这个类是一个服务层组件,需要被扫描并加入到 Spring 容器中。

2.@Repository:用于标记持久层(DAO),表示这是一个数据库相关的 Bean。与 @Service 注解类似,使用 @Repository 注解标记的类也会被 Spring 扫描并自动注入到其他组件中。

3.@Controller:用于标记控制层(Controller),表示这是 MVC 架构中的控制器组件。Spring 会自动扫描使用了 @Controller 注解的类,并将其注册为控制器 Bean,在处理请求时自动将请求映射到相应的 @RequestMapping 注解标注的方法中进行处理。

4.@Configuration:用于标记配置类,主要用于定义应用程序的 Bean 以及 Bean 之间的依赖关系。与 @Component 注解不同,@Configuration 注解不需要在类名前面添加前缀,其作用相当于一个工厂,用于生产 Bean,并使用 @Bean 注解将其返回。

5.@ControllerAdvice:用于定义全局异常处理器,可以捕获处理所有 Controller 中抛出的异常。@ControllerAdvice 注解需要结合 @ExceptionHandler 注解一起使用,用于定义异常处理方法。

6.@ModelAttribute:用于标注一个方法的返回值或方法参数,表示它们应该被添加到绑定到请求中的 Model 属性中。在使用 @ModelAttribute 标记的方法中,可以向模型中添加属性或组合多个模型属性。

总结来说,以上这些注解都是基于 @Component 注解派生出来的,用于表示不同类型的 Spring Bean 组件,使用这些注解可以更加精细地管理和控制应用程序中的组件。

@ConfigurationProperties 基本使用

在 SpringBoot 中,当想需要获取到配置文件数据时,除了可以用 Spring 自带的 @Value 注解外,SpringBoot 还提供了一种更加方便的方式:@ConfigurationProperties。只要在 Bean 上添加上了这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到 Bean 中。

比如在application.properties文件中有如下配置文件   那么按照如下注解配置,

config.username=jay.zhou
config.password=3333

   那么按照如下注解配置,SpringBoot项目中使用@ConfigurationProperties的Bean,它的username与password就会被自动注入值了。就像下面展示的那样 

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "config")
public class TestBean{private String username;private String password;
}

SpringBoot主要帮助我们做了两件事情。

         第一件事情就是获取到使用@ConfigurationProperties的类。

         第二件事就是解析配置文件,并把对应的值设置到我们的Bean中。

@Data


Lombok自动生成getter/setter

http://www.dtcms.com/a/265823.html

相关文章:

  • [创业之路-467]:企业经营层 - 《营销管理》的主要内容、核心思想以及对创业者的启示
  • 【Spring boot】tomcat Jetty Undertow对比,以及应用场景
  • Qt 事件
  • 医科+AI!和鲸支持南京医科大学医学数据挖掘课程实践教学落地
  • CCLinkIE转EtherCAT:食品产线测厚仪的“精准心跳”如何跳动?
  • 重学React(二):添加交互
  • 运维服务部中级服务工程师面试试题
  • 【Spring篇09】:制作自己的spring-boot-starter依赖1
  • 服务器如何配置防火墙规则开放/关闭端口?
  • ROS2---话题重映射
  • 能生成二维码的浏览器插件来了
  • 模型训练复习
  • RabbitMQ 高级特性之发送方确认
  • 12、jvm运行期优化
  • .Net Core 中RabbitMQ基本使用
  • [自然语言处理]计算语言的熵
  • 【Python办公】Excel转CSV文件(可指定拆分行数\可批量或单个)
  • 用C#编写一个读取磁盘第一扇区的程序
  • 架空线路云台监控系统应对线路故障的智能化解决方案
  • 深度学习中的逻辑回归:从原理到Python实现
  • leetcode:1049. 最后一块石头的重量 II[01背包][动态规划]
  • 实际开发如何快速定位和解决死锁?
  • PM2.5和PM10分别是什么
  • 基于MATLAB的风力发电机无人机巡检路径优化研究
  • 最新PDF转markdown软件MonkeyOCR整合包,文档图片解析工具
  • 深度解析:Java内部类与外部类的交互机制
  • odoo-057 pgadmin 登录忘记密码
  • 【实时Linux实战系列】实时以太网与 TSN 基础
  • ARM单片机启动流程(二)(详细解析)
  • UDP服务器主要是指什么意思?