我已经定义了 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?如果是,怎么样?
答案 0 :(得分:1)
您可以使用注射拦截器。
对于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部分中获得有关它的更多信息。访问上面的refence的本地SLSB 。
答案 1 :(得分:-1)
我理解你的问题是:你有问题使用spring将请求范围的bean注入另一个。 所以试试这个:
<bean id="boo" class="Boo" scope="request">
<aop:scoped-proxy/>
</bean>
<bean id="foo" class="Foo">
<property name="boo" ref="Boo" />
</bean>