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

EJB 3.0 依賴注入實戰:@EJB 註解完整用法與 JNDI 對應

     編輯:Java 相關知識

EJB 3.0 引入註解式依賴注入,大幅簡化 Bean 間引用。本文通過完整範例解析 @EJB 的屬性注入、Setter 注入、beanName 與 mappedName 的差異。

範例架構

  • Bean1、Bean2、Bean3:遠端介面
  • Bean1Impl:實作 Bean1/Bean2,JNDI 名 bean12
  • Bean2Impl:實作 Bean3,注入 Bean1/Bean2
  • 客戶端透過 JNDI 查找 bean3/remote 呼叫

實作代碼

// 介面
@Remote public interface Bean1 { void sayBean1(); }
@Remote public interface Bean2 { void sayBean2(); }
@Remote public interface Bean3 { void sayBean3(); }

// Bean1Impl 實作 Bean1 & Bean2
@Stateless(name="bean12")
public class Bean1Impl implements Bean1, Bean2 {
    public void sayBean1() { System.out.println("bean1........."); }
    public void sayBean2() { System.out.println("bean2........."); }
}

// Bean2Impl 實作 Bean3,注入 Bean1 & Bean2
@Stateless(name="bean3")
public class Bean2Impl implements Bean3 {
    @EJB(beanName="bean12") Bean1 bean1;          // 屬性注入
    @EJB(beanName="bean12") Bean2 bean2;          // 同名不同介面
    
    @EJB(mappedName="bean12/remote")              // Setter 注入,指定 JNDI 名
    public void setBean2(Bean2 bean2) { this.bean2 = bean2; }

    public void sayBean3() {
        bean1.sayBean1();
        bean2.sayBean2();
        System.out.println("bean3.........");
    }
}

客戶端測試

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
Context ctx = new InitialContext(props);
Bean3 bean = (Bean3) ctx.lookup("bean3/remote");
bean.sayBean3();

輸出結果

bean1.........
bean2.........
bean3.........

關鍵點總結

屬性用途範例值
beanName指定目標 Bean 的 @Stateless(name=...) 名稱bean12
mappedName指定目標 Bean 的全域 JNDI 名稱bean12/remote
注入位置欄位 / Setter 方法均支援
範圍限制僅限本地命名服務無法注入遠端伺服器物件

實務建議:優先使用 beanName(邏輯名稱),避免硬編碼 JNDI 路徑,提升可移植性。

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