代理模式
代理模式(重点)
-
学习代理模式原因:这是Spring AOP的底层
-
代理模式的分类:
- 静态代理
- 动态代理
![image-20260319151238558]()
静态代理
- 抽象角色 :一般使用抽象类和接口来解决
- 真实角色:被代理的角色
- 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
- 客户:访问代理对象
代码步骤:
-
接口
public interface UserService { public void add(); public void delete(); public void update(); public void find(); } -
真实角色
public class UserServiceImpl implements UserService { @Override public void add() { System.out.println("addUser"); } @Override public void delete() { System.out.println("deleteUser"); } @Override public void update() { System.out.println("updateUser"); } @Override public void find() { System.out.println("findUser"); } } -
代理角色
public class UserServiceProxy implements UserService{ private UserServiceImpl UserServiceImpl; public void setUserServiceImpl(UserServiceImpl userServiceImpl) { UserServiceImpl = userServiceImpl; } @Override public void add() { log("add"); UserServiceImpl.add(); } @Override public void delete() { log("delete"); UserServiceImpl.delete(); } @Override public void update() { log("update"); UserServiceImpl.update(); } @Override public void find() { log("find"); UserServiceImpl.find(); } public void log(String msg){ System.out.println("log"+msg); } } -
客户
public class Client { public static void main(String[] args) { UserServiceProxy userServiceProxy = new UserServiceProxy(); userServiceProxy.setUserServiceImpl(new UserServiceImpl()); //代理里面会有其他附属操作 userServiceProxy.add(); } }
代理模式的好处:
- 可以使真实角色更加纯粹!不同去关注一些公共的服务
- 公共的也就交给代理角色!实现业务的分工
- 公共业务发生拓展的时候,方便集中管理!
缺点:
- 一个真实角色就会产生一个代理角色
-
动态代理
- 动态代理和静态代理角色一样
- 动态代理的代理类是动态生成的,不是我们直接写好的
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口--JDK动态代理
- 基于类:cglib
- java字节码实现;:javaSiSt
需要了解两个类: Proxy:代理, InvocationHandler:调用处理程序
优点:
- 动态代理和静态代理角色一样
- 动态代理的代理类是动态生成的,不是我们直接写好的
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 一个动态代理类代理是一个接口,一般对应一类业务
- 一个动态代理类可以代理多个类,只要实现了同一个接口
感受:虽然没有弄懂怎么来的,但会用而且觉得这个很厉害很实用。


浙公网安备 33010602011771号