IT评测·应用市场-qidao123.com
标题:
【SpringBoot】AOP默认的动态代理
[打印本页]
作者:
农妇山泉一亩田
时间:
2023-3-6 11:24
标题:
【SpringBoot】AOP默认的动态代理
分析:
当引入AOP相关依赖后
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
复制代码
Spring启动时会加载
AopAutoConfiguration
这个类中通过
@EnableAspectJAutoProxy
注解开启AOP,代码如下
点进去看看:
可以看到该注解是通过proxyTargetClass参数来控制是否使用Cglib动态代理的,默认值为false,即使用JDK动态代理
验证一下:
public interface MyService {
void say();
}
复制代码
@Component
public class MyServiceImpl implements MyService{
@Override
public void say() {
System.out.println("123");
}
}
复制代码
@Aspect
@Component
public class AOPTest {
@Before("execution(* demo.aop.MyServiceImpl.say(..))")
public void beforeSay() {
System.out.println("hello");
}
}
复制代码
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class AOPTest {
@Autowired
MyService myService;
@Test
public void test() {
myService.say();
}
}
复制代码
debug执行:
嗯?并不是JDK动态代理,用的是Cglib动态代理,跟我们第二张图看到的默认值不一样哎
此时返回去看第一张图,发现
@ConditionalOnProperty
注解下有属性
matchIfMissing = true
,即在缺少
proxy-target-class
配置的情况下,会匹配
CglibAutoProxyConfiguration
,使用
@EnableAspectJAutoProxy(proxyTargetClass = true)
,就是使用Cglib动态代理
结论:
SpringBoot 2.x AOP默认使用的是Cglib动态代理
附加:
【学习日志】Cglib动态代理和JDK动态代理的对比
【一句话】@Configuration和@Component的区别
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4