参考:使用阿里云进行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.pswp.cn/web/87805.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87805.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87805.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java操作word实战

文章目录简介段落页头与页脚页码表格图片批注文本框目录图表简介 Word编程最重要的类是org.apache.poi.xwpf.usermodel.XWPFDocument。涉及的东西十分复杂。而且Apache poi操作word的技术非常不成熟。代码中本身有很多bug。   Maven的依赖为 <dependency><groupId&…

【Flask】flask中get方法和post方法区别

对于post和get在我以前的认知下一直认为是&#xff1a; 前端发送给后端就称为post 前端需要从后端返回就用get 但是在开发过程中发现了不仅仅如此 区别 GET 意图&#xff1a;获取&#xff08;GET&#xff09; 信息。你只是想读取服务器上已经存在的资源&#xff0c;你不打算改变…

Linux sudo升级

应对 Linux sudo 本地提权漏洞&#xff1a;离线升级 Sudo 到安全版本 一、引言 在 Linux 系统中&#xff0c;sudo&#xff08;superuser do&#xff09;是一个非常重要的工具&#xff0c;它允许授权用户以超级用户&#xff08;root&#xff09;的权限执行命令。然而&#xff0c…

ubuntu 6.8.0 安装xenomai3.3

通过以下步骤来获取和准备 Linux 内核 6.8.0 的源码&#xff0c;并应用 Xenomai 补丁&#xff1a; 1. 下载 Linux 内核 6.8.0 源码 你可以从 The Linux Kernel Archives 下载 Linux 内核 6.8.0 的源码。以下是具体步骤&#xff1a; 访问内核官方网站&#xff1a; 打开 The Li…

drawRect 触发时机

在 iOS 开发中&#xff0c;UIView 的 drawRect: 方法&#xff08;或其底层 CALayer 的绘制&#xff09;的触发时机是由系统控制的&#xff0c;开发者不能直接调用这些方法。以下是触发视图绘制的完整机制&#xff1a;一、核心触发时机 1. 视图首次显示 当视图被添加到视图层级时…

1.1_4 计算机网络的分类

在这个视频中我们会探讨计算机网络的分类&#xff0c;从不同的角度可以对计算机网络进行不同的分类&#xff0c;我们会从分布范围、传输技术、拓扑结构、使用者和传输介质这样的几个维度进行讨论&#xff0c;在这门课当中需要注意的是标红色的几个分类&#xff0c;其他的类别简…

03每日简报20250705

每日简报 新闻简报&#xff1a;AI行业信任危机浮现 标题&#xff1a;知名科技作者Alberto Romero发文《我对AI行业正在失去所有信任》 来源&#xff1a;The Algorithmic Bridge&#xff08;算法之桥&#xff09; 核心内容&#xff1a; 作者立场&#xff1a;长期支持AI技术…

Python 多版本环境治理理念驱动的系统架构设计:三维治理、四级隔离、五项自治 原则

Python 多版本与开发环境治理架构设计-CSDN博客 Python 多版本治理理念&#xff08;Windows 平台 零基础友好&#xff09;-CSDN博客 Python 多版本开发环境治理&#xff1a;理论架构与实践-CSDN博客 【终极实战】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具协同 AnacondaP…

C++ 第四阶段 文件IO - 第一节:ifstream/ofstream操作

目录 一、文件 IO 的基本概念 二、文件流的基本操作 1. 打开文件 2. 关闭文件 3. 检查文件是否成功打开 三、文本文件的读写操作 1. 写入文本文件&#xff08;ofstream&#xff09; 2. 读取文本文件&#xff08;ifstream&#xff09; 四、二进制文件的读写操作 1. 写…

容声W60以光水离子科技实现食材“主动养鲜”

炎炎夏日&#xff0c;孩子沉迷电视手机屏幕&#xff0c;视力堪忧&#xff1f;高价买回的“超级食物”羽衣甘蓝、车厘子&#xff0c;几天就蔫了&#xff1f;切开的西瓜放进冰箱&#xff0c;却怕沾染细菌&#xff1f;7月5日&#xff0c;容声冰箱“WILL养鲜 高能一夏”新品发布会给…

力扣面试150(13/150)

7.3 380. O(1) 时间插入、删除和获取随机元素 实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。bool…

需要scl来指定编译器的clangd+cmake在vscode/cursor开发环境下的配置

最近cursor更新了插件商店&#xff0c;只能使用默认它魔改的c/c插件&#xff08;基于clangd的&#xff09;&#xff0c;手头刚好在折腾一个cmake工程&#xff0c;试试水尝试直接配置在cursor上可以编译运行。 主要是本地环境使用scl来管理gcc/g&#xff0c;所以在配置过程中需要…

docker离线/在线环境下安装elasticsearch

如果想离线安装docker、redis、gninx、mysql可参照下面这个。 离线环境下&#xff0c;docker安装redis、ngnix、mysql 获取离线包 方式1 找一个能上网的环境&#xff0c;下载elasticsearch的镜像&#xff0c;然后将这个镜像导出 docker pull docker.elastic.co/elasticsear…

响应式编程入门教程第一节:揭秘 UniRx 核心 - ReactiveProperty - 让你的数据动起来!

响应式编程入门教程第一节&#xff1a;揭秘 UniRx 核心 - ReactiveProperty - 让你的数据动起来&#xff01;-CSDN博客 响应式编程入门教程第二节&#xff1a;构建 ObservableProperty&#xff1c;T&#xff1e; — 封装 ReactiveProperty 的高级用法-CSDN博客 今天我们来聊聊…

单片机:STM32F103的开发环境搭建

本文将详细介绍如何搭建STM32F103的开发环境。STM32F103是STMicroelectronics推出的一款基于ARM Cortex-M3内核的32位微控制器&#xff08;MCU&#xff09;&#xff0c;广泛应用于嵌入式开发。以下是搭建开发环境的详细步骤&#xff0c;涵盖硬件准备、软件安装、工具链配置及简…

eNSP中实现vlan间路由通信(路由器)

eNSP中实现vlan间路由通信&#xff08;路由器&#xff09; 拓扑图PC配置 pc1&#xff1a;192.168.10.1255.255.255.0192.168.10.254pc2&#xff1a;192.168.20.1255.255.255.0192.168.20.254pc3&#xff1a; 192.168.10.2255.255.255.0192.168.10.254pc4:192.168.20.2255.255.2…

spring6合集——spring概述以及OCP、DIP、IOC原则

spring6合集——Spring6核心知识点总结启示录一、SOLID原则1. 单一职责原则&#xff08;SRP&#xff09;2. 开闭原则&#xff08;OCP&#xff09;3. 里氏替换原则&#xff08;LSP&#xff09;4. 接口隔离原则&#xff08;ISP&#xff09;5. 依赖倒置原则&#xff08;DIP&#x…

Stata如何做机器学习?——SHAP解释框架下的足球运动员价值驱动因素识别:基于H2O集成学习模型

SHAP解释框架下的足球运动员价值驱动因素识别——基于H2O集成学习模型⚽ 欢迎关注 「阿水实证通」&#xff0c;前沿方法时刻看&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 文章目录 SHAP解释框架下的足球运动员价值驱动因素识别——基于H2O集成学习模型⚽聚焦&…

基于Android的益智游戏学习系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

Oracle11G Linux版本(linux_x86_64_oracle11.2.0.4)

Oracle11G Linux版本 linux_x86_64_oracle11.2.0.4 文件分割成 七个 压缩包&#xff0c;必须集齐 七个 文件后才能一起解压一起使用&#xff1a; p13390677_112040_Linux-x86-64_7of7.zip下载地址&#xff1a; https://download.csdn.net/download/weixin_43800734/20303421 p1…