gpt4 book ai didi

java - Spring AOP 建议被执行两次

转载 作者:行者123 更新时间:2023-12-01 06:14:24 26 4
gpt4 key购买 nike

我正在使用 Spring AOP 创建一个方面。我定义的方面被执行了两次。我似乎不明白为什么。如果有人就这个问题提出任何意见,我将不胜感激。

谢谢!

//Spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="no"
default-lazy-init="true">

<bean id="loggingAdvice" class="com.xyz.aop.LoggingAdvice" />
<aop:config>
<aop:aspect id="loggingAspect" ref="loggingAdvice">
<aop:pointcut id="loggingPointcut"
expression="execution(* com.xyz.FooServiceImpl.foo(..))"/>
<aop:around pointcut-ref="loggingPointcut" method="log" />
</aop:aspect>
</aop:config>

<context:component-scan base-package="com.xyz.controllers" />

</beans>

//建议

package com.xyz.aop;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;

public class LoggingAdvice {
public Object log(final ProceedingJoinPoint pjp) throws Throwable {
log.info("Started!");
try {
return pjp.proceed();
} finally {
log.info("Ended!");
}
}
}

//建议方法

package com.xyz;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class FooServiceImpl implements FooService {
private static final Log log = LogFactory.getLog(FooServiceImpl.class);

@Override
public void foo() {
log.info("Foo!");
}
}
}

//输出

   Started!
Started!
Foo!
Ended!
Ended!

//编辑 1:添加了更多 spring 配置信息。根本不使用任何 Spring AOP 注释。我附加了一个调试器,发现方面/日志语句也被执行了两次。所以我怀疑它与日志语句打印两次字符串有什么关系。

最佳答案

嗯,看来这实际上是记录器的问题。我很久以前就遇到过同样的问题,发现所有内容都被记录了两次。当我用常规 sysout 调用替换记录器调用时,一切正常。

关于java - Spring AOP 建议被执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27815519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com