黑马程序猿_Java 代理机制学习总结

-------<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>期待与您交流!

----------

 

 

 

posted @ 2016-03-09 14:36  mengfanrong  阅读(176)  评论(0编辑  收藏  举报