美文网首页
2020-02-26

2020-02-26

作者: 安蓝天 | 来源:发表于2020-02-26 23:51 被阅读0次

Spring的AOP
代理模式

三种实现

1.

通过Proxy的newProxyInstance(类加载器,代理对象的所有接口,new   invocationHandler  )实现代理.method的invoke(目标对象,参数列表对象)调用代理对象的方法,返回Object是每个方法的返回值,添加的功能可以写在method方法的前后,newProxyInstance方法返回Object类型,需要转换类型.

InvocationHandler :    调用管理者---- 接口的唯一一个方法 invoke

 Proxy : 代理类---提供很多方法,常用的有newProxyInstance  



invoke()内

proxy:指代我们所代理的那个真实对象

method:被代理的方法

args:被代理方法的参数列表对象

Proxy

这个类的作用就是用来动态创建一个代理对象的类,它提供了许多的方法,但是我们用的最多的就是 newProxyInstance 这个方法:

publicstaticObject newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler handdler)throwsIllegalArgumentException

loader:一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载

interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了

handler:一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上

2.

使用Spring中增强类Enhancer实现aop方式

1.创建Enhancer对象

2.设置Enhancer的superclass setSuperclass(被代理的对象的class类)

3.设置Enhancer对象的回调方法setAllBack()

4.通过对象的create()返回代理对象

3

通过Spring的ioc(控制反转)完成对象的创建

bean 的id 和 name的区别

id和name都是spring 容器中中bean 的唯一标识符。

id: 一个bean的唯一标识 , 命名格式必须符合XML ID属性的命名规范

name: 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”

,用逗号或者分号或者空格隔开。如果没有id,则name的第一个名称默认是id

us : 被代理的目标对象

my:额外添加的功能的类

proxy:代理创建代理对象的类

interfaces:被代理对象的接口们

target:目标对象

itercepetorNames ::额外添加的功能的类

optimiza: true(使用cglib 代码生成库,效率高 )/false(使用jdk自带的动态代理)

添加功能的类 需要实现 MethodInterceptor

相关文章

网友评论

      本文标题:2020-02-26

      本文链接:https://www.haomeiwen.com/subject/cbygchtx.html