高新代理

java_高新代理
代理的概念与作用:
生活中的代理:
-->武汉人从武汉的代理商手中买联想电脑和直接跑到北京传智播客旁边来找联想总部买电脑 , 你觉得最
-->终的主体业务目标有什么区别吗?基本上一样吧 , 都解决了核心问题 , 但是 , 一点区别都没有吗?从代
-->理商那里买真的一点好处都没有吗?
程序中的代理:
-->要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能 , 例如 , 异常处理、日志、计算
-->方法的运行时间、事务管理、等等 , 你准备如何做?
-->编写一个与目标类具有相同接口的代理类 , 代理类的每个方法调用目标类的相同方法 , 并在调用方法时
-->加上系统功能的代码 。(参看下页的原理图)
-->如果采用工厂模式和配置文件的方式进行管理 , 则不需要修改客户端程序 , 在配置文件中配置是使用目
-->标类、还是代理类 , 这样以后很容易切换 , 譬如 , 想要日志功能时就配置代理类 , 否则配置目标类 , 
【高新代理】-->这样 , 增加系统功能很容易 , 以后运行一段时间后 , 又想去掉系统功能也很容易 。
图片示例:

高新代理

文章插图
AOP:
系统中存在交叉业务 , 一个交叉业务就是要切入到系统中的一个方面 , 如下所示:
安全 事务 日志
------|----------|------------|-------------
------|----------|------------|-------------
------|----------|------------|-------------
用具体的程序代码描述交叉业务:
{ { {
------------------------------------------------------切面
.... .... ......
------------------------------------------------------切面
} } }
交叉业务的编程问题即为面向方面的编程(,简称AOP) , AOP的目标就是要使交叉业
务模块化 。可以采用将切面代码移动到原始方法的周围 , 这与直接在方法中编写切面代码的运行效果是一样的 , 
如下所示:
------------------------------------------------------切面
func1 func2 func3
{ { {
.... .... ......
} } }
------------------------------------------------------切面
使用代理技术正好可以解决这种问题 , 代理是实现AOP功能的核心和关键技术 。
安全 , 事务 , 日志等功能要贯穿到好多个模块中 , 所以 , 它们就是交叉业务
重要原则:不要把供货商暴露给你的客户
动态代理技术:
要为系统中的各种接口的类增加代理功能 , 那将需要太多的代理类 , 全部采用静态代理方式 , 将
是一件非常麻烦的事情!写成百上千个代理类 , 是不是太累!
JVM可以在运行期动态生成出类的字节码 , 这种动态生成的类往往被用作代理类 , 即动态代
理类 。
JVM生成的动态类必须实现一个或多个接口 , 所以 , JVM生成的动态类只能用作具有相同接口的
高新代理

文章插图
目标类的代理 。
CGLIB库可以动态生成一个类的子类 , 一个类的子类也可以用作该类的代理 , 所以 , 如果要为一
个没有实现接口的类生成动态代理类 , 那么可以使用CGLIB库 。