3. Spring AOP对动态代理的应用
一、什么是代理
你需要乘飞机,但是去不了机场,机票代理点就能让你实现买机票的需求。
你需要办理车过户,但是你不知道流程,在门口找一个专门代你办理的人,他都给你办了,这就是代理。
可见代理是个中间商,他代替原来的事务部门,满足你的需求,这就是代理模式的意义。
想象一下,你想修改某个类以实现特殊的功能,但是这个类在SDK包里,或者在远程机器上,怎么办?
这时候你可以找个代理,不就是想实现自定义功能吗?不用去改原始类了,你在我这随便改,我把原始类集成进来,这样我既有原始类的功能,又有你自定义的功能,不就完美了。
这就是代理模式。
二、代理的分类 1. 静态代理这个 不好类比说明,因为java程序中有运行中的概念,静态代理就相当于运行前,你就已经写好了代理类,然后编译直接调用。
比如有如下场景,目前有个生产玩具的类,在不改变这个类的前提下,增加统计这个类生产玩具方法用时的功能,这个怎么实现?
1 /** 2 * 委托者,原始类,一个生产玩偶的工厂 3 */ 4 public class ToyFactory implements Produce { 5 @Override 6 public void produce_cat() { 7 System.out.println("生产了一只小猫"); 8 try { 9 Thread.sleep(new Random().nextInt(1000)); 10 } catch (InterruptedException e) { 11 e.printStackTrace(); 12 } 13 } 14 15 @Override 16 public void produce_deer() { 17 System.out.println("生产了一只小鹿"); 18 try { 19 Thread.sleep(new Random().nextInt(1000)); 20 } catch (InterruptedException e) { 21 e.printStackTrace(); 22 } 23 } 24 }