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

本文深入探讨Java代理机制,包括其背景、应用场景以及如何利用代理机制提高代码的灵活性和可维护性。介绍了AOP面向切面编程的概念,并通过具体示例说明了如何创建动态代理类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值