config.isOptimize:控制通过cglib创建的代理是否使用激进的优化策略,默认是false,一般也不会改变
config.isProxyTargetClass:是否使用cglib来创建代理对象,默认是false
// 可以通过如下方式设置为true @EnableAspectJAutoProxy(proxyTargetClass = true)
hasNoUserSuppliedProxyInterfaces:代理类是否实现了接口
所以一般情况下代理类实现了接口,则使用jdk动态代理,否则使用cglib代理
可以通过设置@EnableAspectJAutoProxy(proxyTargetClass = true)统一使用cglib代理。
使用cglib代理的时候,当代理对象是个接口,或者是代理对象是jdk动态代理对象时,依旧会使用jdk动态代理
举个例子,当我们对EchoService进行动态代理时,虽然配置了@EnableAspectJAutoProxy(proxyTargetClass = true)来使用cglib进行代理,但因为被代理是jdk动态代理对象,因此还是会使用jdk动代理
@Bean
public EchoService echoService() {
return (EchoService) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{EchoService.class}, new EchoProxy());
}
参考博客
[1]https://blog.csdn.net/choubayan4320/article/details/100868024



