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

时间:2017-02-09 12:11:27

标签: java spring jboss

目前我有一个带有applicationContext.xml的spring项目,它定义了一些用于代码注入的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中声明,但我无法弄清楚如何。

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

编辑:ExampleXClientImpl类未在项目本身中定义,它们是在项目的依赖项中定义的。我可以调整这种依赖性,但如果没有必要,我会更喜欢。

2 个答案:

答案 0 :(得分:2)

如果您的目标是使EJB不在那些bean中,那么我会尝试混合使用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具有默认的prototype范围的EJB,那么您可以使用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;

    ...

}

答案 1 :(得分:1)

我决定使用@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);
    }
}