如果我在使用Spring 2.5 for DI的应用程序中创建EJB3 bean(比如无状态会话bean),我应该如何将Spring中的依赖项注入bean而不将bean耦合到Spring?
答案 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获取目标beanContextSingletonBeanFactoryLocator
, 使用bean中定义的上下文 定义文件命名beanRefContext.xml
。默认情况下,a 预期单个上下文定义, 这是通过类型获得而不是 按名字。但是,如果你需要 选择多个上下文 定义,特定的定位器键是 需要。定位器键(即 中的上下文定义的名称beanRefContext.xml
)可以 明确指定通过 压倒一切getBeanFactoryLocatorKey
中的SpringBeanAutowiringInterceptor
方法 习惯 {{1}} 子类。
从耦合的角度来看,我所知道的唯一另一个选项(扩展EJB 2.x支持类)要差得多(因此不能回答你的问题)。