如何使用Spring 2.5将资源注入EJB3 bean?

时间:2010-08-15 20:43:53

标签: java spring java-ee ejb-3.0

如果我在使用Spring 2.5 for DI的应用程序中创建EJB3 bean(比如无状态会话bean),我应该如何将Spring中的依赖项注入bean而不将bean耦合到Spring?

1 个答案:

答案 0 :(得分:7)

我不知道您是否考虑将拦截器应用为耦合,但据我所知,这是标准方法。来自文档的Chapter 18. Enterprise Java Beans (EJB) integration

  

18.3.2. EJB 3 injection interceptor

     

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

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyFacadeEJB implements MyFacadeLocal {

    // automatically injected with a matching Spring bean
    @Autowired
    private MyComponent myComp;

    // for business method, delegate to POJO service impl.
    public String myFacadeMethod(...) {
        return myComp.myMethod(...);
    }
    ...
}
     

SpringBeanAutowiringInterceptor by   默认从a获取目标bean   ContextSingletonBeanFactoryLocator,   使用bean中定义的上下文   定义文件命名   beanRefContext.xml。默认情况下,a   预期单个上下文定义,   这是通过类型获得而不是   按名字。但是,如果你需要   选择多个上下文   定义,特定的定位器键是   需要。定位器键(即   中的上下文定义的名称   beanRefContext.xml)可以   明确指定通过   压倒一切   getBeanFactoryLocatorKey中的SpringBeanAutowiringInterceptor方法   习惯   {{1}}   子类。

从耦合的角度来看,我所知道的唯一另一个选项(扩展EJB 2.x支持类)要差得多(因此不能回答你的问题)。

另见