-------<a href="http://www.itheima.com/"">android培训</a>、<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------
Java 代理机制学习总结
在编写程序时,除了要解决核心业务逻辑时还要编写一些与核心业务逻辑相关的系统服务代码。如日志,安全等代码。在没有使用java代理机制时,只能将其与业务代码放置在了一起。但这是于java OOP思想是冲突的。加深了程序间的耦合性。
引入了代理机制就可以避免了这样的问题。
我们可以创建某个类的代理类。打个比方,比如在写代码时我希望监察出某个类的某个方法的运行时间。等项目完成交给客户时我又得必须把监视程序效率的代码去掉。这时用代理机制就方便及了。我可以再程序中引用指向该类的代理类。代理类中引用了被代理类,并加上了监察程序效率运行时间的代码。等项目完成交个客户时,只需在程序中把引用指向被代理类即可。根本不需要改变源代码。
AOP 面向切面编程
在编写应用程序时,发现程序中会穿插很多关于日志,安全等相关的代码中。这些代码并不是核心业务代码,却依赖核心业务代码。所以被放置在了业务代码里。就像一个横穿在程序里的一个切面。
这些与核心业务混在一起的系统服务代码加深了代码与代码之间的耦合性。
AOP 面向切面编程就是要将这些代码从程序中抽离出来(抽离只是从效果上来说),进行模块化。
代理类的特点:
1.代理与被代理类有相同的接口。如果原类没有接口,可以使用第三方类库ELGB中的接口。
2.代理类与被代理类有相同的方法。代理类的系统代码是基于被代理类的方法的。可以将代理类的系统代码放在代理类的方法之前,之后,前后,和代理类的catch语句块中。
动态代理类的创建
在写一个项目时,往往需要的代理类是相当多的。如果都是程序员手动的自己去写代理类,是相当要命的。Java提供了自动传建代理类的技术,可以动态的创件一个类的代理类。
Proxy 代理类
Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
通常根据其的一个静态方法得到一个类的代理类
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
参数解释
ClassLoader Loader:为生成的代理类实例指定一个类加载器,通常指定为其接口的类加载器。
Class<?>[] Interfaces:代理类与被代理类共同的接口。
InvocationHandler h:?
InvocationHandler 是代理实例的调用处理程序 实现的接口。
该接口只有一个要被实现的方法
Object invoke(Object proxy, Method method, Object[] args)
在代理实例上处理方法调用并返回结果
在该方法里就可以调用被代理对象,加上代理类的系统代码,完成代理类的代理目的。
下面代码演示自动创建一个代理类,其代理目的是算出被代理的一个方法的时间。
-------<a href="http://www.itheima.com/"">android培训</a>、<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------