pom.xml版本信息:
我有一个swagger2和springboot的项目。
没有@Aspect的项目代码非常有效。代码如下:
public interface TestApi {
WfExecution test(Long temp);
}
@Api(value = "TestAPI")
@RequestMapping(value = "/test")
@RestController
public class TestApiImpl implements TestApi {
@Override
@RequestMapping(value = "/test")
@ApiOperation(value = "", notes = "", produces = MediaType.APPLICATION_JSON)
public WfExecution test(@ApiParam(value = "", required = true) @RequestParam(required = true, value = "temp")
Long temp) {
return new WfExecution();
}
}
正确的结果:
但是当我添加以下代码时,swagger-ui并没有显示test-api-impl。
@Aspect
@Component
public class LoggerAop {
@Before("execution(* com.XXX.controller.impl.TestApiImpl.*(..))")
public void doBeforeAdvice(JoinPoint joinPoint){
System.out.println("XXX");
}
}
错误结果:
招摇与春天AOP之间是否存在冲突?
答案 0 :(得分:1)
@egg
我设置了类似的项目并面临同样的问题。
在@EnableAspectJAutoProxy注释中将proxyTargetClass属性设置为true后,问题得到了解决。
@EnableAspectJAutoProxy(proxyTargetClass=true)
仅当我们使用控制器接口时才会出现此问题。
引用Java doc。
中此属性EnableAspectJAutoProxy的使用用户可以使用控制为{@code FooService}创建的代理类型 {@link #proxyTargetClass()}属性。以下是CGLIB风格的子类' 代理而不是基于默认接口的JDK代理方法。
答案 1 :(得分:0)
此答案适用于仍面临问题的人 @Aspect基本上是一个过滤器。如果您排除了赃物资源,它将开始工作。
您可以使用
@Pointcut("within(com..*..*Controller)")
@Pointcut("within(com..*..*Service)")
因此它将仅扫描那些从com开始的文件...