映射阿里云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.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…