黑马程序猿_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>期待与您交流!
----------
最新文章
- Linux中mongodb安装和导出为json
- 查询阻塞的sql
- Windows Azure Service Bus (2) 队列(Queue)入门
- javascript 字符转换为ascii码,ascii码转换为字符
- 讨论贴:Sqlserver varbinary 是二进制数据,却是十六进制的表现形式
- Linux 分区和目录
- 远程代码仓库URL地址变更后本地仓库的配置方法
- 不能直接获取?聊聊如何在Shader Graph中获取深度图
- git submoudle提交
- Linux中的官方源、镜像源汇总
- 微信公众号申请+新浪SAE申请
- 【Hadoop学习之五】win7+Eclipse+hadoop3搭建本机开发环境
- html、xhtml、html5的区别
- SAC处理命令transfer的一些详细介绍
- stm32中assert_param的用法说明
- 渗透测试工具SPARTA介绍
- 显式等待-----Selenium快速入门(十)
- nginx对nodejs服务器的http、https、ws、wss的配置
- hexo主题中添加相册功能
- JS判断客户端是手机还是PC的2个代码
热门文章
- .net程序员必须知道的知识
- wdcp对default站点开启apache url重写功能
- mysql数据类型——字符串char(m)和varchar(m)
- PHP面向对象(OOP):__set(),__get(),__isset(),__unset()四个方法的应用
- python变量不能以数字打头
- S5PV210开发板刷机(SD卡uboot、串口+USB-OTG刷机方法)
- iOS 取得CGimage字节数据的方法
- 支付宝集成获取私钥与公钥-b
- 隐藏 response headers
- XML CDATA