Spring-Boot 2+强制CGLIB代理,即使proxyTargetClass = false

时间:2019-04-25 15:44:40

标签: java spring spring-boot spring-aop

代理设置似乎在Spring-Boot 1.5+和2. +之间发生了变化。

在Spring 1.5.20中,使用@EnableAspectJAutoProxy(proxyTargetClass = false)或仅使用@EnableAspectJAutoProxy甚至没有注释@EnableAspectJAutoProxy,我都会得到JdkDynamicAopProxy。 并使用@EnableAspectJAutoProxy(proxyTargetClass = true),我将获得CGLIB增强类。好的,一切都好。

使用与Spring 2.1.4相同的代码,无论配置如何,我始终可以获得CGLIB增强的ServiceImpl。

我没有设法在Spring 2+中安装JdkDynamicAopProxy代理。

还有办法吗?

这是我的代码:

@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = false)
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        MyService service = context.getBean(MyService.class);
        service.execute();
    }
}


@Aspect
@Component
public class ChronoAspect {
    @Around("execution(* com.example.demo.service..*.*(..))")
    public Object chronoAround(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        // .....
    }

}

public interface MyService {
    void execute();
}

@Component
public class ServiceImpl implements MyService {
    public void execute() {
        System.out.println("Hello execute from Service.execute");
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个已知问题。

当前您只能设置

spring.aop.proxy-target-class=false
在您的配置文件中

强制其使用JDKProxy。