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

Spring IOC 與 EJB 3 SLSB 依賴注入模式對比:Type 2 Setter 注入統一本質

     編輯:Java 相關知識

Spring IOC (Inversion of Control) 與 EJB 3 Session Bean (SLSB) 依賴注入雖源自不同陣營,但核心機制高度趨同:**皆採用 Type 2 (Setter 注入) 作為基礎注入模式**。本文通過代碼對比揭示兩者統一本質,並分析對學習路徑的啟示。

EJB 3 SLSB 依賴注入範例

Bean 實現

@Stateless
public class HelloBean {
    private String greeting = "Default Hello";

    public void setGreeting(String greeting) {  // Setter 注入點
        this.greeting = greeting;
    }

    public String hello() {
        return greeting;
    }
}

XML 配置 (ejb-jar.xml 或專屬部署描述符)

<ejb-jar>
    <enterprise-beans>
        <session>
            <ejb-name>HelloBean</ejb-name>
            <ejb-class>com.example.HelloBean</ejb-class>
            <session-type>Stateless</session-type>
            <env-entry>
                <env-entry-name>greeting</env-entry-name>
                <env-entry-type>java.lang.String</env-entry-type>
                <env-entry-value>Hello, World</env-entry-value>
            </env-entry>
        </session>
    </enterprise-beans>
</ejb-jar>

容器部署時:讀取 env-entry → 實例化 Bean → 呼叫 setGreeting("Hello, World") → Bean 可用。若需求變更,僅修改 XML 值,無需動代碼。

Spring IOC Setter 注入對應範例

Bean 定義

public class HelloService {
    private String greeting = "Default Hello";

    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }

    public String sayHello() {
        return greeting;
    }
}

Spring XML 配置

<beans>
    <bean id="helloService" class="com.example.HelloService">
        <property name="greeting" value="Hello, Spring"/>
    </bean>
</beans>

容器啟動時:實例化 Bean → 呼叫 setGreeting("Hello, Spring") → Bean 就緒。

核心對比:Type 2 Setter 注入統一本質

維度EJB 3 SLSBSpring IOC共同點
注入模式Setter 注入 (Type 2)Setter 注入 (Type 2)完全一致
配置載體ejb-jar.xml / 部署描述符applicationContext.xml外部化配置,與代碼分離
容器角色EJB 容器 (應用伺服器內建)Spring 容器 (輕量級獨立/嵌入)管理 Bean 生命週期、依賴解析
Bean 識別JNDI 名稱 / @EJB 注入Bean ID / @Autowired邏輯名稱定位實例
攔截/增強Interceptor / @AroundInvokeAOP / @Aspect橫切關注點分離
事務管理CMT/BMT (@TransactionAttribute)@Transactional / TransactionTemplate聲明式事務

Martin Fowler IOC 三種模式回顧

  1. Type 1: 介面注入 — 容器注入實現特定介面的物件 (如 Avalon)。
  2. Type 2: Setter 注入 — 容器呼叫 Setter 方法注入依賴 (Spring、EJB 3 主流)。
  3. Type 3: 建構子注入 — 容器透過建構子參數注入依賴 (PicoContainer、Spring 可選)。

Spring 同時支援 Type 2、Type 3;EJB 3 標準化 Type 2 (亦支援建構子注入)。

學習路徑啟示

  • 掌握 Spring IOC 即掌握 EJB 3 DI 核心:Setter 注入原理、容器啟動流程、依賴圖解析、循環依賴處理、作用域管理等知識可直接轉移。
  • 差異在於生態與規範:EJB 3 綁定 Java EE 規範 (JTA, JPA, JMS, JCA, 安全、遠程介面),Spring 提供更輕量、更靈活、非侵入式的替代方案。
  • 現代趨勢:Spring Boot + Spring Data + Spring Cloud 形成完整雲原生棧;Jakarta EE (原 Java EE) 亦現代化 (CDI, JAX-RS, JSON-B, MicroProfile)。兩陣營在「依賴注入」核心上已高度收斂。

總結

Spring IOC 與 EJB 3 SLSB 依賴注入,**本質上都是 Type 2 Setter 注入的具體實現**。理解這一統一本質,能讓開發者在兩大陣營間自由切換,專注於業務架構設計而非框架語法差異。學好 Spring,EJB 3/Jakarta EE DI 自然迎刃而解;反之亦然。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved