我有一个 .war 应用程序,它使用 Spring 并以两种不同的方式初始化它的上下文。它同时使用注释配置和 XML 配置。所以我的第一个问题是:
这总是一种不好的做法吗?它会导致什么问题?
其次,它同时使用注解和 XML,因为它使用注解设置其 REST 控制器,并使用 XML 设置其服务/DAO。
现在我有一个在服务上效果很好的建议,但如果在 REST 控制器上使用则根本不会触发。
这是其中的一个相关部分:
@Aspect
public class SessionAwareAspect {
private SessionManager sessionManager;
private EngineActionResolver actionResolver;
@Around("@annotation(sessionAware)")
public Object authenticate(final ProceedingJoinPoint invocation, SessionAware sessionAware) {
// some logic
}
@Required
public void setSessionManager(SessionManager sessionManager) {
this.sessionManager = sessionManager;
}
@Required
public void setActionResolver(EngineActionResolver actionResolver) {
this.actionResolver = actionResolver;
}
}
它在上下文中初始化,如下所示:
<bean id="sessionAwareAspect" class="cayetano.pplive.core.session.SessionAwareAspect">
<property name="sessionManager" ref="sessionManager"/>
<property name="actionResolver" ref="engineActionResolver" />
</bean>
<aop:aspectj-autoproxy>
<aop:include name="sessionAwareAspect" />
</aop:aspectj-autoproxy>
所以我的第二个问题是:
上下文是用注释和 XML 初始化的事实是方面不会在控制器上触发的原因吗?如果是这样,我怎样才能使它工作?
谢谢,
部署日志中的一些附加信息。
这就是 XML bean 被实例化的方式:
Nov 01, 2013 1:02:09 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
[list of DAOs/Services]
.... irrelevant log
.... 50/100 lines after
Nov 01, 2013 1:02:22 PM org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init>
INFO: JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
Nov 01, 2013 1:02:22 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
[list of REST controllers]
因此,如果这实际上创建了 2 个单独的 bean 上下文(是吗?),那么在注释初始化的上下文中可能根本不存在方面吗?
再次感谢,