在Spring中注入EJB

时间:2014-05-26 13:49:16

标签: java spring java-ee ejb-3.0

我已经定义了 EJB (使用 Java EE API 7 ),如下所示:

@Stateless
@LocalBean
public class Foo {

    @Inject
    private Boo boo;

    public void doFoo(Collection<Object> c) {
        boo.doSomething(c);
    }

}

@Named
@RequestScope
public class Boo() {

    public void doSomething(Collection<Object> c){
        // Do something...
    }

}

是否可以在 Spring 中注入Foo类的实例作为EJB?如果是,怎么样?

2 个答案:

答案 0 :(得分:1)

您可以使用注射拦截器。

  

对于EJB 3会话Bean和消息驱动Bean,Spring提供了一个   方便的拦截器解决了Spring 2.5的@Autowired   EJB组件类中的注释:   org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor中。   可以通过@Interceptors应用此拦截器   EJB组件类中的注释,或通过   EJB部署描述符中的拦截器绑定XML元素。

代码示例:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class Foo { 

    @Autowired
    private Boo boo;

}

有关详情,请参阅18.3.2. EJB 3 injection interceptor

如果需要从spring访问EJB,可以在spring-context.xml配置中定义bean,如下例所示

<jee:local-slsb id="myComponent" jndi-name="ejb/fooBean"
      business-interface="com.Foo"/>

您可以在 18.2.2部分中获得有关它的更多信息。访问上面的refence的本地SLSB

答案 1 :(得分:-1)

我理解你的问题是:你有问题使用spring将请求范围的bean注入另一个。 所以试试这个:

<bean id="boo" class="Boo" scope="request">
  <aop:scoped-proxy/>
</bean>

<bean id="foo" class="Foo">
  <property name="boo" ref="Boo" />
</bean>