Spring AOP 代理总结:静态代理和动态代理

本文详细介绍了Spring AOP中的代理机制,包括静态代理和动态代理的使用。静态代理需要手动创建代理类,而动态代理分为JDK和Cglib两种方式。JDK动态代理要求被代理类实现至少一个接口,通过反射生成代理对象;Cglib则是通过字节码技术创建被代理类的子类以实现代理。Spring AOP会根据接口情况自动选择合适的动态代理方式。
摘要由CSDN通过智能技术生成

Spring AOP 代理总结:静态代理和动态代理

原文地址:http://jachindo.top:8090/archives/springaop%E4%BB%A3%E7%90%86%E6%80%BB%E7%BB%93%E9%9D%99%E6%80%81%E4%BB%A3%E7%90%86%E5%92%8C%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86

参考:https://mp.weixin.qq.com/s/dLOn23waK4gv-Rp9dC0Kfg

0、作用

***将业务逻辑和系统处理的代码(关闭连接、事务管理、操作日志记录)解耦。***


1、静态代理

自己手动创建Proxy类,并将RealSubject类注入。

image-20200201222845606


2、动态代理 - JDK、Cglib

运行时增强:动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

动态代理主要包含:

JDK动态代理:利用反射接收被代理的类,从而生成代理类Proxy类。被代理的类必须实现一个接口

Cglib动态代理:生成被代理类的子类作为代理类。(所以==被代理类不能被final修饰==)

spring aop会根据被代理类是否实现了某个接口来自动选择动态代理方式


1)JDK动态代理

必须实现一个接口(必须有接口和实现类)

目标类接口:

package a_proxy.a_jdk;
public interface UserService {
   
    public void addUser();
    public void updateUser();
    public void deleteUser();
}

实现类:

package a_proxy.a_jdk;
public class UserServiceImpl implements UserService {
   
    @Override
    public void addUser() {
   
        System.out.println("a_proxy.a_jdk addUser()");
    }

    @Override
    public void updateUser() {
   
        System.out.println("a_proxy.a_jdk updateUser()");

    }

    @Override
    public void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值