标签:产生 日志记录 实现 对象 date 学习 this lazy img
因为代理模式是spring AOP的底层
代理模式分为:静态代理和动态代理
以租房为例,分析静态代理模式
角色分析
代码步骤
1. 接口(租房)
1 public interface Rent { 2 public void rent(); 3 }
2. 真实角色
1 public class Host implements Rent{ 2 @Override 3 public void rent() { 4 System.out.println("房东要租房子"); 5 } 6 }
3. 代理角色
1 public class Proxy implements Rent{ 2 private Host host; 3 Proxy(){ 4 5 } 6 Proxy(Host host){ 7 this.host=host; 8 } 9 @Override 10 public void rent() { 11 host.rent(); 12 } 13 }
4. 客户端访问代理角色
1 public class Client { 2 public static void main(String[] args) { 3 Host host= new Host(); 4 //直接从房东这里租房子 5 //host.rent(); 6 //代理,中介帮房东租房子,代理一般会有一些其他的操作 7 Proxy proxy= new Proxy(host); 8 proxy.rent(); 9 } 10 }
静态代理模式的好处
缺点:一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率低。
模拟日常的增删改查的demo
1. 创建接口(增删改查)
1 public interface Service { 2 public void add(); 3 public void delete(); 4 public void update(); 5 public void query(); 6 }
2. 实现增删改查业务
1 public class ServiceImpl implements Service{ 2 @Override 3 public void add() { 4 System.out.println("添加了数据"); 5 } 6 7 @Override 8 public void delete() { 9 System.out.println("删除了数据"); 10 } 11 12 @Override 13 public void update() { 14 System.out.println("更新了数据"); 15 } 16 17 @Override 18 public void query() { 19 System.out.println("查询了数据"); 20 } 21 }
3. 目前想要在不改变ServiceImpl的情况下,添加日志记录功能,需要添加代理
1 public class ServiceProxy implements Service{ 2 private ServiceImpl serviceImpl; 3 4 public void setServiceImpl(ServiceImpl serviceImpl) { 5 this.serviceImpl = serviceImpl; 6 } 7 8 @Override 9 public void add() { 10 log("add"); 11 serviceImpl.add(); 12 } 13 14 @Override 15 public void delete() { 16 log("delete"); 17 serviceImpl.delete(); 18 } 19 20 @Override 21 public void update() { 22 log("update"); 23 serviceImpl.update(); 24 } 25 26 @Override 27 public void query() { 28 log("query"); 29 serviceImpl.query(); 30 } 31 32 //日志方法 33 public void log(String msg){ 34 System.out.println("使用了"+msg+"方法"); 35 } 36 }
4. 客户访问代理角色,客户既访问了业务对象又访问了代理代理对象,实现了日志方法和业务方法的结合
1 public class ServiceClient { 2 public static void main(String[] args) { 3 ServiceImpl serviceImpl = new ServiceImpl(); 4 ServiceProxy serviceProxy=new ServiceProxy(); 5 serviceProxy.setServiceImpl(serviceImpl); 6 serviceProxy.delete(); 7 8 } 9 }
标签:产生 日志记录 实现 对象 date 学习 this lazy img
原文地址:https://www.cnblogs.com/lxzlovewyq/p/13354296.html