动态代理的通俗理解

动态代理

昨天看了马士兵老师的视频教程,对动态代理有了点自己的理解,写下来防止以后忘了,如有不正之处请多指教。

代理即是在进行一些处理之前或之后插入一些其他的附加操作,所以称为AOP面向切面编程。

四种类:

1.        被代理类:

以汽车、坦克等为例,这种类有一个抽象接口,例如Moveable,为了在调用实现的具体方法前插入其他的事物逻辑,比如检查车辆情况、检查驾驶员情况等,需要动态代理。

2.        代理处理类:

这种类就是要被插入的事物逻辑类,比如检查车辆情况、检查驾驶员情况等都在这个类中实现,会通过参数接收被代理类的对象,这样就知道要对什么进行代理,即对汽车还是坦克进行检查车辆情况、检查驾驶员情况等处理。

3.        代理生成类:

这种类是JAVA提供的,可以看做一个工具,接受的参数有三个,第一个是被代理类的信息,通过getClassLoader方法获得,第二个是被代理类实现的接口,第三个是代理处理类的对象。通过这些参数,JVM动态的生成一个代理类。

4.        代理类:

因为代理生成类的参数都是为了生成这种代理类,所以其实现了被代理类的接口,即它有了能够实现Moveable的具体方法,并且它还获得了代理处理类的对象。这样,在调用具体的move方法内部,它会调用代理处理类对象的invoke方法。这个invoke方法就是处理具体事务逻辑的方法,即在move之前要做些什么操作,之后要做些什么操作,这里的具体操作是检查车辆情况、检查驾驶员情况等。

在主方法中进行如下操作:

		//实例化要代理的对象
		Tank t = new Tank();

		//实现具体的代理处理类对象,将要代理的对象传入
		//InvocationHandler 是一个自定义的代理接口,CheckHandler是其实现子类
		InvocationHandler h = new CheckHandler(t);

		//通过代理生成类动态生成一个代理类,该代理类实现了传入的接口,使用传入的代理处理类对象调用其代理处理方法,返回代理类的对象
		Moveable m = (Moveable) Proxy.newProxyInstance(Moveable.class,h);

		//m是一个代理类的对象,调用的方法实际上是代理类的方法,该方法内部调用invoke方法
		m.move;

用通俗的话说,就是你给我被操作的对象和要插入的处理,我给你生成一个类,别人就用这个类来操作,用的时候这个类的对象会在这些操作前后插入你要求的处理。如果别人不想加入插入的处理了,就用你自己的对象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值