Spring02——实现动态代理拦截器

实现动态代理的2种方式

第一种:  用JDK提供的Proxy代理类InvocationHandler调用处理类  配合起来可以拦截一个接口下面的实现类,拦截它的方法,这样可以在它之前做点事情之后做点事情都可以。不过使用JDK这种方式必须实现接口才可以。优势:使用反射创建对象,创建效率高。

面向接口编程    spring里默认用jdk方式。为啥?都有接口,面向接口编程的。下面来实现一个小练习实践理解

①自定义一个接口

Spring02——实现动态代理拦截器

②写一个接口实现类

Spring02——实现动态代理拦截器

③写一个拦截

Spring02——实现动态代理拦截器

④主函数调用

Spring02——实现动态代理拦截器

第二种: 用cglib第三方库,它是用asm   这是搞class字节码的,这种方式基于子类的,基于继承,如果类没有接口就可以用这种方式。优势:执行效率高

①创建一个练习类

Spring02——实现动态代理拦截器

②创建一个代理类

Spring02——实现动态代理拦截器

③主函数调用

Spring02——实现动态代理拦截器

运行效果:

Spring02——实现动态代理拦截器

上面例子举得不是很好,一般在拦截到类和方法后可以干点拦截前拦截后的事情,再举个例子,比如io流操作拦截到后要close掉,可有时为了效率好则希望把它放入连接池里,下次需要再调用,但是一close掉就销毁了,所以可以在拦截到后再拦截前就把它放入连接池,这次就算close掉也已经放入连接池里下次可以直接拿来用了。

上一篇:安卓学习问题3:Unable to start the virtual device


下一篇:安卓——之Animation动画特效