代码之家  ›  专栏  ›  技术社区  ›  brabster

如何使用Spring2.5将资源注入EJB3 bean?

  •  8
  • brabster  · 技术社区  · 14 年前

    如果我在一个使用Spring2.5 for DI的应用程序中创建一个EJB3 bean(比如无状态会话bean),我应该如何在不将bean耦合到spring的情况下将依赖项从spring注入bean?

    1 回复  |  直到 8 年前
        1
  •  7
  •   P̲̳x͓L̳    8 年前

    我不知道您是否考虑将拦截器作为耦合应用,但据我所知,这是标准方法。从 Chapter 18. Enterprise Java Beans (EJB) integration 文件编号:

    18.3.2. EJB 3 injection interceptor

    对于EJB3会话bean和 消息驱动bean,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 通过 默认值从 ContextSingletonBeanFactoryLocator , 在bean中定义上下文 名为的定义文件 beanRefContext.xml . 默认情况下,A 需要单个上下文定义, 通过类型而不是 按名字。但是,如果你需要 在多个上下文之间选择 定义,特定的定位键是 必修的。定位键(即 中上下文定义的名称 beanrefcontext.xml文件 可以 通过明确指定 重写 getBeanFactoryLocatorKey A方法 习俗 弹簧自动布线拦截器 子类。

    从耦合的角度来看,我所知道的唯一其他选项(扩展EJB2.X支持类)要糟糕得多(因此无法回答您的问题)。

    也见