Pointcut源码学习

 首先看一下Pointcut接口的定义:

package org.springframework.aop;
public interface Pointcut {
     ClassFilter getClassFilter();
     MethodMatcher getMethodMatcher();
     Pointcut TRUE = TruePointcut.INSTANCE;

}

ClassFilter接口决定一个类是否要应用于Advice。

ClassFilter接口定义如下:
package org.springframework.aop;
public interface ClassFilter {
     boolean matches(Class clazz);
     ClassFilter TRUE = TrueClassFilter.INSTANCE;

}

matches()方法中要决定传入的类是不是符合Pointcut的定义,如果此类符合Pointcut的定义,则返回TRUE,否则返回FALSE。

ClassFilter.TRUE是ClassFilter的简单实现,他总是返回true。

下面就要看一下TrueClassFilter类的实现:

package org.springframework.aop;

import java.io.Serializable;
class TrueClassFilter implements ClassFilter, Serializable {
     public static final TrueClassFilter INSTANCE = new TrueClassFilter();
     private TrueClassFilter() {
 }

 public boolean matches(Class clazz) {
      return true;
 }
 private Object readResolve() {
      return INSTANCE;
 }

 public String toString() {
          return "ClassFilter.TRUE";
     }

}

此类定义了一个static的实例,并将其构造函数设置成private,目的是将其设置为singleton模式(对任意多请求返回同一实例)。

上面已经提到过了,ClassFilter.TRUE是ClassFilter的简单实现,他总是返回true。在这里对matches()方法的实现即可看出其原因。其中的readResolve()方法是提供对序列化的支持。

 

Pointcut.TRUE是Pointcut接口的简单实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值