我已经定义了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注入?如果是,怎么办?

最佳答案

您可以使用注入拦截器。


  对于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节中获得有关它的更多信息。访问以上引用的本地SLSB。

09-11 19:17
查看更多