Spring 框架的兩大支柱——IoC(控制反轉)與 AOP(面向切面編程),其中 IoC 通過 spring-core 與 spring-context 實現。本文以 XML 配置為切入點,構建核心概念認知。
控制反轉(IoC)即依賴注入(DI):對象依賴的創建與獲取控制權從對象自身轉移至容器。以「汽車加油」為喻:
new Dependency(),強耦合)可被容器管理注入的對象稱為 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="petStore" class="com.example.PetStoreService">
<property name="accountDAO" ref="accountDAO"/>
<property name="itemDAO" ref="itemDAO"/>
</bean>
</beans>
// 容器啟動:加載多個配置文件
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});
// 獲取 Bean 並使用
PetStoreService service = context.getBean("petStore", PetStoreService.class);
List<String> users = service.getUsernameList();
services.xml 定義服務層 Bean 及其依賴引用:
<bean id="petStore" class="com.example.service.PetStoreService">
<property name="accountDAO" ref="accountDAO"/>
<property name="itemDAO" ref="itemDAO"/>
</bean>
daos.xml 定義數據訪問層實現:
<bean id="accountDAO" class="com.example.dao.AccountDAO"/>
<bean id="itemDAO" class="com.example.dao.ItemDAO"/>
Java 類結構需包含對應的 setter 方法:
public class PetStoreService {
private AccountDAO accountDAO;
private ItemDAO itemDAO;
// 必須提供 setter
public void setAccountDAO(AccountDAO accountDAO) { this.accountDAO = accountDAO; }
public void setItemDAO(ItemDAO itemDAO) { this.itemDAO = itemDAO; }
}
雖然 XML 配置利於理解原理,但現代開發推薦:
@Component、@Autowired 簡化配置@Configuration + @Bean 類型安全重構掌握 XML 配置本質是為了更好理解注解背後的機制。實際項目中請根據團隊規範選擇適配方式。