jakarta-ee - 选择要注入(inject)的 EJB 无需重新编译

标签 jakarta-ee dependency-injection ejb

假设您有两个 @Local 的实现。界面

@Local
public interface LocalInterface {
}

@Stateless
public class MyFirstImplementation implements LocalInterface {
}

@Stateless
public class MySecondImplementation implements LocalInterface {
}

而我想选择,无需重新编译我想要使​​用的项目(即在运行时或使用外部配置属性)(MyFirstImplementation 或 MySecondImplementation)。
public class MyClass {
   @EJB
   LocalInterface local;
}

一旦选择了一种实现方式,它就不必改变。如果有帮助,我正在使用 JBoss 5.1。

最佳答案

您可以使用部署描述符来实现它 - ejb-jar.xml .像这样的东西(可能不是 100% 准确,但我认为你明白了):

<ejb-jar> 
   <enterprise-beans>
      <session>
         <ejb-name>MyClass</ejb-name>
         <ejb-ref>
            <ejb-ref-name>ejb/myLocalReferencedBean</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
            <local>com.yourpackage.LocalInterface</local>
            <ejb-link>MyFirstImplementation</ejb-link>
            <injection-target>local</injection-target>
         </ejb-ref>
      </session>

      <session>
         <ejb-name>MyFirstImplementation</ejb-name>
         <!-- ... -->
      </session>
      <session>
         <ejb-name>MySecondImplementation</ejb-name>
         <!-- ... -->
      </session>
   </enterprise-beans>
</ejb-jar>

另一种方法是使用此处描述的 CDI:Inject @EJB bean based on conditions

关于jakarta-ee - 选择要注入(inject)的 EJB 无需重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927681/

相关文章:

spring - Apache 四郎 : how to set the authenticationStrategy using spring applicationcontext?

java - Dagger2 - 应用程序不能依赖于多个作用域组件

java - 实现依赖注入(inject)困惑

c# - 我应该使用 Unity(它还活着吗)?

hibernate - 示例标准 Hibernate Multiple Join/Table SQL

java - 与 Weblogic、JNDI 和 SSL 的自定义套接字连接

java - 我想使用 ArrayList 在我的控制台中显示来自数据库的所有数据

java - 部署程序集配置不适用于 mvn 包

java - HttpURLConnection 在 J2EE 应用程序中跳过 FILTER

java - JBoss从v4迁移到v7,支持EJB2.1