java代理模式

代理模式:指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。

应用代理对象的原因:客户端不想直接访问实际的对象,或者访问实际的对象存在困难,或者想为被代理对象透明的添加一些功能,如事务、日志等。

实现方式

       1.静态代理:一个委托类对应一个代理类,代理类在编译期间就已经确定:

       2.动态代理:代理类并不是在Java代码中实现,而是在运行时期生成(动态生成字节码,目前动态生成字节码的技术有:ASM/Javassist。ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别;javaassist直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类,它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。)。

动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。

在面向对象的编程之中,如果我们想要约定Proxy 和RealSubject可以实现相同的功能,有两种方式:

    a.一个比较直观的方式,就是定义一个功能接口,然后让Proxy 和RealSubject来实现这个接口。

    b.还有比较隐晦的方式,就是通过继承。因为如果Proxy 继承自RealSubject,这样Proxy则拥有了RealSubject的功能,Proxy还可以通过重写RealSubject中的方法,来实现多态。

其中JDK中提供的创建动态代理的机制,是以a 这种思路设计的,而cglib 则是以b思路设计的(cglib底层是通过asm来生成新类)。

参考文档:https://blog.csdn.net/luanlouis/article/details/24589193

 

面向切面(AOP):

编译时、载入时、运行时

aspectJ:编译时(类生成时已经完成织入)、载入时(在加载过程中,可以通过agent)

spring aop:jdkProxy、cglib运行时

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值