我是否允许在拦截器上声明生命周期拦截器?

时间:2010-03-30 14:03:16

标签: spring dependency-injection java-ee ejb interceptor

我定义了我的业务bean:

@Local
@Interceptors(BusinessInterceptor.class})
public class MyBean implements SomeBean { ... }

然后我希望我的BusinessInterceptor配置为Spring SpringBeanAutowiringInterceptor

@Interceptors(SpringBeanAutowiringInterceptor.class)
public class BusinessInterceptor {
    @Autowired
    private SomeSpringBean someSpringBean;
}

这是允许/合法吗?我收到错误(主要是NPE),表明BusinessInterceptor中的字段尚未正确初始化。

1 个答案:

答案 0 :(得分:1)

我怀疑这可行。如果我很了解你的场景,你基本上有两个DI容器,一个是Spring,另一个是应用程序。服务器本身。每个人管理不同的元素。 BusinessInterceptor由应用创建。不知道Spring的服务器 - 然后没有设置@Autowired bean。

(请注意,Spring和EJB3现在变得非常相似。您可以使用与Spring相同的功能.Spring确实具有声明式事务,依赖注入和类似于EJB3拦截器的AOP工具(这些是主要的托管功能)。另一方面,EJB3现在非常轻量级,因此没有真正令人信服的理由将Spring与EJB3一起使用。请参阅Future of enterprise Java:完整堆栈Spring或完整堆栈Java EE。但这不能回答这个问题,并且只是我的一点点离题:)