spring AOP 何为动态代理
时间: 2023-11-06 22:06:42 浏览: 48
Spring AOP 中的动态代理是指在运行时动态地创建代理对象,而不是在编译时就确定代理对象的类型。Spring AOP 中使用 JDK 动态代理或 CGLIB 动态代理来实现动态代理。
JDK 动态代理是通过反射机制来实现的,它只能代理实现了接口的类,而 CGLIB 动态代理则是通过继承来实现的,它可以代理没有实现接口的类。
在 Spring AOP 中,如果目标对象实现了接口,则默认使用 JDK 动态代理;如果目标对象没有实现接口,则使用 CGLIB 动态代理。
相关问题
spring aop jdk动态代理
Spring AOP中的JDK动态代理是一种实现动态代理的方式。它通过使用JDK的Proxy类和InvocationHandler接口来生成代理对象和处理代理逻辑。具体来说,当我们使用Spring AOP时,代理对象的生成直接使用了JDK动态代理的Proxy.newProxyInstance方法。而代理逻辑则是通过实现了InvocationHandler接口的invoke方法来实现的。在Spring AOP中,JdkDynamicAopProxy类实现了InvocationHandler接口,并完成了Spring AOP拦截器链拦截等一系列逻辑。通过JdkDynamicAopProxy的invoke方法,我们可以在目标方法执行前后添加额外的逻辑。这种方式的优点是可以在运行时动态地生成代理对象,不需要事先编写代理类的代码。这样可以更加灵活地实现横切关注点的功能,并且可以避免代码冗余。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Spring AOP --JDK动态代理方式](https://blog.csdn.net/m0_46195271/article/details/108714116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [SpringAOP JDK动态代理](https://blog.csdn.net/weixin_46281472/article/details/125629339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
springaop jdk动态代理
Spring AOP使用JDK动态代理和CGLIB代理来实现切面编程。JDK动态代理是基于接口的代理,它只能代理实现了接口的类,而CGLIB代理则可以代理没有实现接口的类。
在Spring AOP中,如果目标对象实现了至少一个接口,则使用JDK动态代理。如果目标对象没有实现任何接口,则使用CGLIB代理。
JDK动态代理是通过反射机制来实现的,它可以在运行时动态地创建代理类和代理对象。当调用代理对象的方法时,实际上是调用了InvocationHandler接口的invoke()方法,该方法会根据方法名和参数列表来调用目标对象的方法。