Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @自动连线不';我不能和拦截器一起工作_Java_Spring_Rest_Spring Aop_Spring Annotations - Fatal编程技术网

Java @自动连线不';我不能和拦截器一起工作

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

我正在使用ApacheCXF开发REST服务。我使用Spring3.1注释来连接bean。我已经编写了一个拦截器,它截取我的REST方法以进行监视。要做到这一点,我必须自动连接我的监视器类,它作为库添加到我的项目中@自动连线在这种情况下似乎不起作用,导致NPE。我做错什么了吗

@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,因为某些方面将在编译时添加。