将 applicationContext.xml 中定义的 bean 移动到 jboss 配置



目前我有一个带有applicationContext的spring项目.xml它定义了一些用于代码注入的bean:

<bean class="com.example.Example1ClientImpl">
    <constructor-arg type="java.lang.String" value="${EXAMPLE1_URL}" />
</bean>
<bean class="com.example.Example2ClientImpl">
    <constructor-arg type="java.lang.String" value="${EXAMPLE2_URL}" />
</bean>

我想将此代码重构为另一个不使用 spring 的项目。它运行在 JBoss 服务器上,所以我假设这些 bean 可以用 ejb-jar.xmljboss-ejb3.xml 声明,但我无法弄清楚如何声明。

是否有可能做到这一点,有人可以给我一些关于如何做到这一点的指示吗?

编辑:示例XClientImpl类不是在项目本身中定义的,它们是在项目的依赖项中定义的。我可以适应这种依赖关系,但如果没有必要,我更喜欢。

如果你的目标是用这些豆子制作EJB,那么我会尝试混合使用xml和注释:

EJB-jar.xml

在这里定义环境属性:

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" metadata-complete="false">
  <enterprise-beans>
    <session>
      <ejb-name>Configuration</ejb-name>
      <env-entry>
        <env-entry-name>EXAMPLE1_URL</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>url1</env-entry-value>
      </env-entry>
      <env-entry>
        <env-entry-name>EXAMPLE2_URL</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>url2</env-entry-value>
      </env-entry>
    </session>
  </enterprise-beans>
</ejb-jar>

Ejb

在这里,您可以创建一个Singleton(因为这是默认的 Spring 范围(。如果你想让 bean 具有 EJB 的缺省prototype作用域,那么你可以用 Stateless 来注释它:

import javax.annotation.Resource;
import javax.ejb.Singleton;
@Singleton
public class Example1ClientImpl{
    @Resource(name = "EXAMPLE1_URL")
    private String url;
    ...
}
@Singleton
public class Example2ClientImpl{
    @Resource(name = "EXAMPLE2_URL")
    private String url;
    ...
}
<</div> div class="one_answers">

我决定使用@Produces,我忘记了它的存在。解决方案如下所示:

public class ClientProducer {
    private static final String CLIENT1_ENDPOINT_VAR = "CLIENT1_URL";
    private static final String CLIENT2_ENDPOINT_VAR = "CLIENT2_URL";
    @Produces
    public Example1Client produceExample1Client() {
        String uri = System.getProperty(CLIENT1_ENDPOINT_VAR);
        return new Example1ClientImpl(uri);
    }
    @Produces
    public Example2Client produceExample2Client() {
        String uri = System.getProperty(CLIENT2_ENDPOINT_VAR);
        return new Example2ClientImpl(uri);
    }
}

最新更新