Java @自动连线不';我不能和拦截器一起工作
我正在使用ApacheCXF开发REST服务。我使用Spring3.1注释来连接bean。我已经编写了一个拦截器,它截取我的REST方法以进行监视。要做到这一点,我必须自动连接我的监视器类,它作为库添加到我的项目中@自动连线在这种情况下似乎不起作用,导致NPE。我做错什么了吗Java @自动连线不';我不能和拦截器一起工作,java,spring,rest,spring-aop,spring-annotations,Java,Spring,Rest,Spring Aop,Spring Annotations,我正在使用ApacheCXF开发REST服务。我使用Spring3.1注释来连接bean。我已经编写了一个拦截器,它截取我的REST方法以进行监视。要做到这一点,我必须自动连接我的监视器类,它作为库添加到我的项目中@自动连线在这种情况下似乎不起作用,导致NPE。我做错什么了吗 @Aspect @Component public class ApplicationMonitoring { Logger logger = LoggerFactory.getLogger(ApplicationMon
@Aspect
@Component
public class ApplicationMonitoring {
Logger logger = LoggerFactory.getLogger(ApplicationMonitoring.class);
@Autowired
private Monitor monitor;
@Around("execution(* com.abc.xyz.rest.CustomerResource.getCustomerByAccountNumber(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
String methodName = joinPoint.getSignature().getName();
long start = System.currentTimeMillis();
try {
// proceed to original method call
Object result = joinPoint.proceed();
monitor.elapsedTime(methodName, System.currentTimeMillis() - start);
return result;
} catch (Exception e) {
throw e;
}
}
应用程序上下文:
.................
......
<context:spring-configured />
<context:component-scan base-package="com.abc">
<context:exclude-filter expression="org.springframework.stereotype.Controller"
type="annotation" />
</context:component-scan>
<context:annotation-config/>
.............
。。。。。。。。。。。。。。。。。
......
.............
我不是Spring的大师,但就我所知,我会尽我所能把它用文字表达出来
我想您已经注意到了,但是@Aspect不是基于spring的,所以为了扫描它,您需要添加
,此外,我认为问题在于正在创建同一类的两个实例,每个容器一个(spring和AspectJ),以避免我使用工厂方法将完全相同的实例检索到spring容器(如果我正确解释的话,我不确定是否100%。)-记住,首先创建方面的方面-,方法如下:
<bean id="id_of_your_bean" class="ApplicationMonitoring" factory-method="aspectOf">
//other stuff
</bean>
//其他东西
在中找到了解决方案
aspect是一个单例对象,在Spring容器外部创建。使用XML配置的解决方案是使用Spring的工厂方法来检索aspect
<bean id="monitoringAspect" class="com.myaapp.ApplicationMonitoring"
factory-method="aspectOf" />
通过此配置,该方面将被视为任何其他SpringBean,自动连接将正常工作。您能否显示您在此
@aspect
上进行组件扫描的上下文?@SotiriosDelimanolis我已使用ApplicationContext更新了原始帖子此问题通常发生在SpringBean没有注释时hat最终应该生成两个代理(例如事务代理和方面代理)。Spring能够生成其中一个代理,但随后它“释放”元数据以创建第二个代理。避免这种情况的一个方法是使用aspectj编译时weaver,因为某些方面将在编译时添加。