EnableAspectJAutoProxy

EnableAspectJAutoProxy

pom.xml版本信息:


springfox-swagger2:2.5.0
挥杆核心:1.5.10
springfox-swagger-ui:2.6.1
的springboot:1.5.3


我有一个带有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();
    }
}


正确的结果:

java - spring @Aspect无法与swagger2一起使用-LMLPHP

但是,当我添加以下代码时,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");
    }
}


错误结果:

java - spring @Aspect无法与swagger2一起使用-LMLPHP

昂首阔步和春季AOP之间有冲突吗?

最佳答案

@蛋

我设置了类似的项目,并遇到了同样的问题。

如下所示,在@EnableAspectJAutoProxy批注中将proxyTargetClass属性设置为true后,问题得到解决。

@EnableAspectJAutoProxy(proxyTargetClass=true)

仅当我们将接口用于控制器时,才会发生此问题。

引用Java doc中该属性EnableAspectJAutoProxy的使用。


  用户可以使用以下方法控制为{@code FooService}创建的代理类型
   {@link #proxyTargetClass()}属性。以下启用CGLIB样式的“子类”
   代理,而不是默认的基于接口的JDK代理方法。

08-28 09:22