代理相关的概念
-
advisor 包含切入点和切入方法
-
切点 pointcut 意即在哪里做切入
-
切入方法 advice 包括 运行前 返回后 抛出异常后 最终finally 环绕 五种 spring支持的advice有以下几种
- MethodInterceptor
- MethodBeforeAdviceAdapter
- AfterReturningAdviceAdapter
- ThrowsAdviceAdapter 这个比较有意思,这个ThrowsAdvice接口内容是空的,解析这个advice的时候,从接口实现中扫描约定好的方法。 其中MethodInterceptor是能够直接支持的,如果是其他的的advice,就使用对应的适配器转化成MethodInterceptor。 定义advisor的时候,有个参数是runtime,如果为true,则再对代理对象方法的参数做下过滤。 这里会有两次匹配
- 第一次是初始化的时候,判断在处理的bean是否命中某些advisor 第一次匹配的时候,会把spring中所有的advisor以及使用aspectj注解修饰的bean,并缓存下来
-
第二次是代理对象真正执行的时候,会判断有哪些advisor和当前执行的方法匹配
-
joinpoint 连接点 具体指带方法的运行,真正执行代理逻辑的方法会有一个joinpoint的对象,基于这个对象,可以执行被代理对象的方法
spring中给提供了ProxyFactory给我们封装了代理的实现