mvc算是一种思维模式,
java是面向对象编程
对于代码来说提高其扩展性对于业务是有增强的效果的
Dao层 下有impl
service层下有 impl
创建接口的目的就是解耦合,提高扩展性 ,
单单创建一个主业务类是不够的 ,因为可能不止一个业务,不可能所有的内容都在这个业务类中做修改,这样不利于程序的修改和维护
Agen类其实就是创建第二个类来实现 service接口 在Agent类中创建主业务类对象.
然后在Agent类中输出想要添加的内容,在内容的合适位置调用主业务类的方法 .
这样就做到了代理实现 ,做到了业务增强 !
----------------------------------
代理实现类的话只有一个,也是单一增强,
所以在这个基础上又增加了一个动态代理模式
目的就是为了让代码的复用性变得更强
代理实现类 一旦实现了 implements java.lang.reflect.InvocationHandler 这个类的话
那么该类就更像是一个代理实现类的管理类了
注意此时代理实现类实现InvocationHandler类之后 成为了代理管理类了 ,所以要用代理类的话干活的话
就需要创建或者提供一个这样的类吧
------------------------------
在类中还有得提供一个方法专门用来提供代理类的实例对象
提供代理类的主要代码是
Object agent = Proxy.newProxyInstance( obj.getClass().getClassLoader(),
obj.getClass().getInterfaces()
this
);
return agent;
注意此时的实例代理对象是Object类型 可以向下转型成为任何类型
此处解答代理实现类的疑问 为什么要将主业务类和代理实现类关联在一起,?
同样代理实现管理类中也需要将主业务属性类声明并且要跟对象相关联(使用有参构造方法直接传进去就行了)
为什么要将主业务类作为属性声明在代理类中
后期动态代理的时候 提供一个代理实例对象的时候需要关联主业务类的上层接口(service接口)
上面的代码最后有个this ,则代表的是该代理对象关联的就是service接口 (这代理管理类中有个service接口属性)
-----
重写InvocationHandler 这个类的invoke方法
invoke方法就是专门用来 拆解和 强化主业务类中方法的
执行主业务类的方法时,invoke方法会将这个调用方法的这段代码进行分解
然后所在invoke方法中 添加想要输出的内容也就是对其进行增强
然后再在invoke方法中重组 原来主业务类中的方法 并将其作为结果返还
这个过程也就是 调用主业务方法的时候 将该方法解体,然后插入增强数据后 ,
输出增强(插入)数据,同时在invoke方法中重新调用主业务方法 输出.
然后返还主业务方法的输出结果.这样就做到了 在调用主业务方法的同时 输出了其他数据
--------
在最后程序执行的时候 那么就是由 代理实例对象来调用 主业务中的方法
在代理模式中和动态代理模式中最终的效果就是 随你怎么变化 都是有Agent类或者Agent实例对象来 调用方法
最后带动主业务类中的方法实现