SpringBoot基礎知識-從XML配置文件到Java Config

項目結構與依賴

首先,我們需要添加 Spring 核心依賴:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version>
</dependency>

項目結構如下:

com.example
├── config          // 配置類包
│   └── Config.java // 主配置類
├── entity          // 實體類包
│   └── Emp.java    // 員工實體類
└── Main.java       // 程序入口

核心注解解析

Java Config 主要通過以下注解實現 XML 配置的功能:

Java Config 注解對應 XML 配置說明
@Configuration<beans>標識當前類為配置類,對應 XML 配置文件
@Bean<bean>聲明一個 Bean 對象,方法名默認作為 Bean 的 id
@ComponentScan<context:component-scan>配置組件掃描路徑
@ImportResource<import>導入 XML 配置文件
@PropertySource<context:property-placeholder>導入屬性配置文件
@Import<import>導入其他配置類

代碼實現

1. 實體類定義

首先創建一個簡單的實體類Emp

package com.example.entity;public class Emp {int id;String name;@Overridepublic String toString() {return "Emp{" +"id=" + id +", name='" + name + '\'' +'}';}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Emp() {}public Emp(int id, String name) {this.id = id;this.name = name;}
}

2. 配置類定義

創建配置類Config,替代傳統的applicationContext.xml

package com.example.config;import com.example.entity.Emp;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.*;/*
@Configurable對應于applicationContext.xml
@Bean對應于.xml中<bean id=""></bean>
@ComponentScan("com.wgy")對應于.xml中<context:component-scan base-package=""/>掃注解(創類的注解)
@ImportResource("classpath:applicationContext.xml")對應于.xml中<import resource="classpath:"/>
@PropertySource("classpath:db.properties")對應于.xml中<context:property-placeholder location="classpath:db.properties"/>。可以在@Value("${?}")中寫值
@Import(Other.class)  整合多個java-config
*/
@Configurable
public class Config {@Bean   //若未指定注解name屬性,則bean的id = "方法名"public Emp emp(){Emp emp = new Emp(1,"張三");return emp;}
}

3. 主程序入口

創建主程序類,初始化 Spring 容器并獲取 Bean:

package com.example;import com.example.config.Config;
import com.example.entity.Emp;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Main {public static void main(String[] args) {/*ClassPathXmlApplicationContext和AnnotationConfigApplicationContext都是Spring框架中用于創建IoC容器的實現類。一個應用只需一個ioc容器!*/AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);Emp stu = applicationContext.getBean("emp", Emp.class);System.out.println(stu);}
}

運行結果

運行Main類的main方法,控制臺將輸出:

Emp{id=1, name='張三'}

這表明我們成功通過 Java Config 配置創建了 Spring 容器,并從容器中獲取到了Emp對象。

擴展說明

  1. 容器初始化方式

    • 傳統 XML 配置使用ClassPathXmlApplicationContext
    • 注解配置使用AnnotationConfigApplicationContext
  2. Bean 的命名規則

    • @Bean注解未指定name屬性時,默認以方法名作為 Bean 的 id
    • 可以通過@Bean(name = "customName")指定自定義名稱
  3. 配置類的組合

    • 可以使用@Import注解導入其他配置類
    • 對于大型項目,建議按功能模塊拆分多個配置類

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94577.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用無標簽語音自我提升音頻大模型:SI-SDA 方法詳解

用無標簽語音自我提升音頻大模型:SI-SDA 方法詳解 在語音識別和處理領域,近年來大模型(Large Language Models, LLMs)的發展迅速,為語音任務帶來了新的突破。然而,語音信號的復雜性使得這些模型在特定領域中表現不佳。如何在沒有標注數據的情況下提升音頻大模型的表現?…

開源工具新玩法:cpolar提升Penpot協作流暢度

文章目錄前言1. 安裝Docker2. Docker鏡像源添加方法3. 創建并啟動Penpot容器3. 本地使用Penpot進行創作4. 公網遠程訪問本地Penpot4.1 內網穿透工具安裝4.2 創建遠程連接公網地址5. 固定Penpot公網地址前言 你是否也曾因商業設計軟件的高昂費用而放棄團隊協作&#xff1f;或者…

DINOv2 vs DINOv3 vs CLIP:自監督視覺模型的演進與可視化對比

近年來&#xff0c;自監督學習在計算機視覺領域取得了巨大進展&#xff0c;推動了無需人工標注即可學習強大視覺表示的視覺基礎模型&#xff08;Vision Foundation Models&#xff09;的發展。其中&#xff0c;DINOv2 和 CLIP 是兩個極具影響力的代表性工作&#xff0c;而最新的…

并發編程——05 并發鎖機制之深入理解synchronized

1 i/i--引起的線程安全問題 1.1 問題思考&#xff1a;兩個線程對初始值為 0 的靜態變量一個做自增&#xff0c;一個做自減&#xff0c;各做 5000 次&#xff0c;結果是 0 嗎&#xff1f; public class SyncDemo {private static int counter 0;public static void increment()…

數字接龍(dfs)(藍橋杯)

非常好的聯系dfs的一道題目&#xff01; 推薦看這位大佬的詳解——>大佬詳細題解 #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std;const int N 2e5 10,M20; int a[M][M]; bool val[M][M]; i…

[光學原理與應用-318]:職業 - 光學工程師的技能要求

光學工程師需具備扎實的專業知識、熟練的軟件操作能力、豐富的實踐經驗、良好的溝通協作與項目管理能力&#xff0c;以及持續學習和創新能力&#xff0c;以下是具體技能要求&#xff1a;一、專業知識與理論基礎光學基礎知識&#xff1a;熟悉光學原理、光學材料、光學儀器等基礎…

萬字詳解架構設計:業務架構、應用架構、數據架構、技術架構、單體、分布式、微服務都是什么?

01 架構要素結構連接在軟件行業&#xff0c;對于什么是架構一直有很多的爭論&#xff0c;每個人都有自己的理解。不同的書籍上、不同的作者&#xff0c;對于架構的定義也不統一&#xff0c;角度不同&#xff0c;定義不同。此君說的架構和彼君理解的架構未必是一回事。因此我們在…

使用Docker搭建StackEdit在線MarkDown編輯器

1、安裝Docker# 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安裝StackEdit2.1、方式1詳見&#xff1a; https://benweet.github.…

【C++詳解】用哈希表封裝實現myunordered_map和 myunordered_set

文章目錄一、框架分析二、封裝框架&#xff0c;解決KeyOfT三、?持iterator的實現四、const迭代器五、實現key不支持修改六、operator[ ]七、一些補充(reserve和rehash)八、源碼一、框架分析 SGI-STL30版本源代碼中沒有unordered_map和unordered_set&#xff0c;SGI-STL30版本是…

【 MYSQL | 基礎篇 四大SQL語句 】

摘要&#xff1a;本文先介紹數據庫 SQL 的核心概念&#xff0c;接著闡述 SQL 通用語法與 DDL、DML、DQL、DCL 四大分類&#xff0c;隨后詳細講解各類語句操作&#xff0c;包括 DDL 的數據庫與表操作及數據類型&#xff0c;DML 的數據增刪改&#xff0c;DQL 的查詢語法與功能&am…

Transformer 模型在自動語音識別(ASR)中的應用

文章目錄自動語音識別&#xff08;ASR&#xff09;簡介簡要介紹TransformerTransformer 在 ASR 中的應用基于“語音識別模型整體框架圖”的模塊介紹1. 音頻采集模塊&#xff08;Audio Acquisition Module&#xff09;2. 音頻預處理模塊&#xff08;Audio Preprocessing Module&…

集成電路學習:什么是SSD單發多框檢測器

SSD:單發多框檢測器 SSD(Single Shot MultiBox Detector)是一種高效的目標檢測算法,它通過單一網絡實現對象檢測,具有快速且準確的特點。以下是關于SSD的詳細解析: 一、SSD的技術特點 1、單一網絡檢測: SSD通過單一的前向傳播過程預測不同尺度的邊界框和類別概率…

【車載開發系列】汽車零部件DV與PV試驗的差異

【車載開發系列】汽車零部件DV與PV試驗的差異 【車載開發系列】汽車零部件DV與PV試驗的差異【車載開發系列】汽車零部件DV與PV試驗的差異一. 概念說明二. DV測試&#xff08;Design Verification 設計驗證測試&#xff09;三. PV測試&#xff08;Performance Verification 性能…

如何在阿里云百煉中使用釘釘MCP

本文通過阿里云百煉釘釘MCP配合&#xff0c;完成釘釘AI表格&#xff08;多維表&#xff09;數據管理 &#xff0c;其他AI開發工具可參照本文完成部署。 準備工作 在正式開始前&#xff0c;需要提前了解什么是釘釘MCP&#xff0c;詳情請參考釘釘服務端API MCP 概述。已經注冊了…

【lucene】SpanNearQuery中的slop

在`SpanNearQuery`中,`slop`的定義比你描述的稍微復雜一些。以下是一些更準確的解釋和分析: 1. `slop`的定義 `SpanNearQuery`的`slop`參數指的是兩個`SpanTermQuery`(或更一般的`SpanQuery`子句)之間允許的最大“不匹配位置”的數量。具體來說: - 不匹配位置:指的是第…

sqli-labs通關筆記-第64關 GET數值型SQL盲注(雙括號閉合 130次探測機會)

目錄 一、代碼審計 1、源碼分析 2、SQL注入風險分析 &#xff08;1&#xff09;聯合SQL注入方法&#xff08;不可行&#xff09; &#xff08;2&#xff09;報錯SQL注入方法&#xff08;不可行&#xff09; &#xff08;3&#xff09;總結 二、滲透實戰 1、滲透準備 2…

每日一題——力扣498 對角線遍歷

力扣498 對角線遍歷 問題分析給定一個 m x n 矩陣&#xff0c;我們需要按照對角線順序遍歷所有元素。對角線遍歷的特點是&#xff1a; 每條對角線上元素的行索引與列索引之和為常數遍歷方向交替變化&#xff1a;奇數對角線&#xff08;從右上到左下&#xff09;&#xff0c;偶數…

【單例模式】

概述一個類不管創建多少次對象&#xff0c;永遠只能得到該類型的一個對象的實例。常用到的比如日志模塊 &#xff0c;數據庫模塊餓漢&#xff1a;在類加載時就創建單例對象&#xff0c;因此它是線程安全的&#xff0c;因為對象的創建在程序啟動時就已經完成&#xff0c;不存在多…

Unity開發如何實現換裝技術

一、3D換裝方案SkinnedMeshRenderer組件替換&#xff08;最常用&#xff09;適用場景&#xff1a;角色需要保持骨骼動畫&#xff0c;更換服裝/武器等實現步驟&#xff1a;1.準備模型&#xff1a;所有服裝需使用相同骨骼結構&#xff08;建議在建模軟件中綁定到同一套骨骼&#…

RabbitMQ面試精講 Day 29:版本升級與平滑遷移

【RabbitMQ面試精講 Day 29】版本升級與平滑遷移 在“RabbitMQ面試精講”系列的第29天&#xff0c;我們聚焦于一個在中高級系統架構與運維面試中極具分量的話題——RabbitMQ的版本升級與平滑遷移。隨著業務發展和RabbitMQ自身功能演進&#xff08;如從經典集群到Quorum隊列、從…