首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring IOC 容器快速入門:基於 XML 配置的完整示例

     編輯:Java 綜合教學

學習環境

  • 框架版本:Spring Framework 4.0.0
  • 構建工具:Maven
  • 核心依賴:spring-context、spring-beans、spring-core、spring-expression

項目結構

src/main/java
└── com.nucsoft.spring.helloworld
    ├── HelloWorld.java      # Bean 類
    └── Main.java            # 測試類
src/main/resources
└── spring
    └── ApplicationContext.xml  # Spring 配置文件

步驟一:引入 Jar 包依賴

Maven pom.xml 核心依賴:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>
    <!-- 會傳遞引入 spring-beans, spring-core, spring-expression, commons-logging -->
</dependencies>

步驟二:創建 Spring 配置文件

src/main/resources/spring/ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans 
       https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- Bean 定義將在這裡配置 -->
    
</beans>

步驟三:編寫非侵入式 Bean 類

package com.nucsoft.spring.helloworld;

/** 
 * 純 POJO,無任何 Spring 依賴 
 */
public class HelloWorld {
    private String userName;
    
    // 必須提供 setter,供 IOC 容器注入
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    public void hello() {
        System.out.println("hello: " + userName);
    }
}

步驟四:在 XML 中配置 Bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans 
       https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="helloWorld" class="com.nucsoft.spring.helloworld.HelloWorld">
        <!-- setter 注入:property name 對應屬性名,value 對應注入值 -->
        <property name="userName" value="spring"/>
    </bean>
    
</beans>

步驟五:獲取 Bean 並調用方法

package com.nucsoft.spring.helloworld;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        // 1. 創建 IOC 容器,加載配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/ApplicationContext.xml");
        
        // 2. 從容器獲取 Bean(按 id 查找,需強制轉型)
        HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
        
        // 3. 調用業務方法
        helloWorld.hello(); // 輸出: hello:spring
    }
}

核心概念總結

兩大核心步驟

  1. 配置 Bean:在 Spring 配置文件中聲明 <bean>,指定類全限定名、id、屬性注入
  2. 獲取 Bean:通過 ApplicationContext(IOC 容器)獲取配置好的 Bean 實例

關鍵術語

術語說明
IOC (Inversion of Control)控制反轉:對象創建權從應用代碼轉移到容器
DI (Dependency Injection)依賴注入:容器自動將依賴注入到對象中(如 setter 注入)
Bean被 Spring 容器管理的對象
ApplicationContextSpring 高級容器接口,提供國際化、事件發布、資源加載等
ClassPathXmlApplicationContext從類路徑加載 XML 配置的容器實現

Bean 生命週期(簡化版)

XML 解析 → 實例化 (無參構造) → 屬性注入 (setter) 
→ 初始化回調 (init-method/InitializingBean) 
→ 就緒使用 
→ 容器關閉時銷毀 (destroy-method/DisposableBean)

進階提示

  • 構造器注入:使用 <constructor-arg> 替代 <property>
  • 工廠方法:factory-method 屬性指定靜態工廠方法
  • 作用域:scope="singleton|prototype|request|session"
  • 注解開發:現代項目推薦使用 @Component + @Autowired + Java Config,減少 XML

常見錯誤避坑

  • ❌ Bean 類缺少無參構造器
  • ❌ 屬性無 setter 方法(setter 注入必須)
  • ❌ 配置文件路徑錯誤(注意 classpath: 前綴)
  • ❌ Jar 包版本衝突或缺失 commons-logging
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved