当前位置: 首页 > 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.lryc.cn/news/579454.html

相关文章:

  • 百度文心智能体平台x小米应用商店:联手打造行业首个智能体与应用市场跨端分发模式
  • webrtc-streamer视频流播放(rstp协议h264笔记)
  • KDD 2025 | 地理定位中的群体智能:一个多智能体大型视觉语言模型协同框架
  • Go应用容器化完全指南:构建最小化安全镜像的终极实践
  • I/O 线程 7.3
  • VTK中自定义双组分输入最大值滤波
  • 基于spark的北京房价数据分析及价格预测
  • npm 命令入门指南(前端小白版)
  • 以太坊 Legacy 交易和 EIP-1559 交易
  • C++ 标准模板库算法之 transform 用法
  • RAG从入门到高阶(二):Retrieve-and-Rerank
  • 开源无广告面板mdserver-web:替代宝塔实现服务器轻松管理
  • NCCL的基本使用和常用通信算法源码分析
  • 洛谷-循环结构(1)
  • 前端框架中注释占位与Fragment内容替换的实现与优化
  • 网络基础(3)
  • Spring 6 源码深度掘金:66+核心原理与高频面试攻坚指南
  • 【科研绘图系列】基于R语言的种质资源评分相关性分析与可视化教程
  • 【零基础学AI】第21讲:TensorFlow基础 - 神经网络搭建入门
  • 从生活实例看:点积、内积和矩阵乘法如何玩转机器学习
  • 【maven仓库搜索下载工作流程】
  • 后端 Maven打包 JAR 文件、前端打包dist文件、通过后端服务访问前端页面、Nginx安装与部署
  • 办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。
  • Flask 遇到了 AttributeError: ‘Babel‘ object has no attribute ‘localeselector‘ 怎么解决
  • TinyWebserver学习(8)-定时器
  • 在 Jetson Orin 开发套件上使用 Hardware Encoder / Decoder 构建 FFmpeg
  • 仿真软件介绍 COMSOL Multiphysics 或 ANSYS Fluent 等 MATLAB OpenFOAM,和在化学上的应用实例
  • 2025年6月一区-田忌赛马优化算法Tianji’s horse racing optimization-附Matlab免费代码
  • Springboot3整合ehcache3缓存--XML配置和编程式配置
  • 【PyCharm 2025.1.2配置debug】