Как внедрить ресурсы в бины EJB3 с помощью Spring 2.5? - PullRequest
8 голосов
/ 16 августа 2010

Если я создаю EJB3-компонент (скажем, сессионный компонент без сохранения состояния) в приложении, использующем Spring 2.5 для DI, как я должен внедрить зависимости из Spring в bean-компонент без привязки bean-компонента к Spring?

1 Ответ

7 голосов
/ 16 августа 2010

Я не знаю, рассматриваете ли вы применение перехватчика в качестве связующего, но это, насколько мне известно, стандартный подход. Из Глава 18. Интеграция Enterprise Java Beans (EJB) документации:

18.3.2. EJB 3 инъекционный перехватчик

Для EJB 3 Session Beans и Бин, управляемый сообщениями, Spring предоставляет удобный перехватчик, который разрешает Spring 2.5's @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, с контекстом, определенным в бине файл определения с именем beanRefContext.xml. По умолчанию ожидается определение единого контекста, который получается по типу, а не по имени. Однако, если вам нужно выбирать между несколькими контекстами Определения, конкретный ключ локатора требуется. Ключ локатора (то есть имя определения контекста в beanRefContext.xml) можно явно указано либо через переопределение getBeanFactoryLocatorKey метод в обычай SpringBeanAutowiringInterceptor подкласс.

Единственный другой вариант, который мне известен (расширение классов поддержки EJB 2.x), намного хуже с точки зрения связи (и, следовательно, не отвечает на ваш вопрос).

Смотри также

...