EJB 採侵入式設計,強迫類別實作特定介面、遵循規範;輕量級框架(如 Avalon)亦要求實作 Serviceable 等介面。Spring 核心哲學:不影響 Java 物件原有設計,將其納入框架管理。因此大量採用反射與內省實現靈活的 IOC(控制反轉)容器。
Spring 統一管理 Bean 屬性存取與方法調用的核心是 org.springframework.beans.BeanWrapper,預設實作 BeanWrapperImpl。它對任意 Bean 提供:
public class Company {
private String name;
private Employee managingDirector;
// getter/setter 略
}
public class Employee {
private float salary;
// getter/setter 略
}
// 使用 BeanWrapper
Company c = new Company();
BeanWrapper bwComp = new BeanWrapperImpl(c);
bwComp.setPropertyValue("name", "Some Company Inc.");
Employee jim = new Employee();
BeanWrapper bwJim = new BeanWrapperImpl(jim);
bwJim.setPropertyValue("name", "Jim Stravinsky");
bwComp.setPropertyValue("managingDirector", jim);
// 透過巢狀路徑獲取薪資
Float salary = (Float) bwComp.getPropertyValue("managingDirector.salary");
雖較直接呼叫 setter 繁瑣,但提供統一的元編程介面,支援框架層面的通用 Bean 操作。
Spring 將 Bean 納入核心登記表管理,支援兩種生成模式:
BeanFactory 介面定義 getBean(String name) 等方法,實作類(如 XmlBeanFactory、ApplicationContext)負責解析配置、實例化、依賴注入與生命週期管理。