首页 / 软件开发 / JAVA / Spring源代码解析(五):Spring AOP获取Proxy
Spring源代码解析(五):Spring AOP获取Proxy2011-03-29 javaeye jiwenke下面我们来看看Spring的AOP的一些相关代码是怎么得到Proxy的,让我们我们先看看 AOP和Spring AOP的一些基本概念:Advice:通知,制定在连接点做什么,在Sping中,他主要描述Spring围绕方法调用注入的额外 的行为,Spring提供的通知类型有:before advice,AfterReturningAdvice,ThrowAdvice,MethodBeforeAdvice,这些都是 Spring AOP定义的接口类,具体的动作实现需要用户程序来完成。Pointcut:切点,其决定一个advice应该应用于哪个连接点,也就是需要插入额外处理的地方的 集合,例如,被某个advice作为目标的一组方法。Spring pointcut通常意味着标示方法 ,可以选择一组方法调用作为pointcut,Spring提供了具体的切点来给用户使用,比如正 则表达式切点 JdkRegexpMethodPointcut通过正则表达式对方法名进行匹配,其通过使用 AbstractJdkRegexpMethodPointcut中的对MethodMatcher接口的实现来完成pointcut功能 :Java代码public final boolean matches(Method method, Class targetClass) {
//这里通过放射得到方法的全名
String patt = method.getDeclaringClass().getName() + "." + method.getName();
for (int i = 0; i < this.patterns.length; i++) {
// 这里是判断是否和方法名是否匹配的代码
boolean matched = matches(patt, i);
if (matched) {
for (int j = 0; j < this.excludedPatterns.length; j++) {
boolean excluded = matchesExclusion(patt, j);
if(excluded) {
return false;
}
}
return true;
}
}
return false;
}在JDKRegexpMethodPointcut中通过JDK中的正则表达式匹配来完成pointcut的最终确 定:Java代码protected boolean matches(String pattern, int patternIndex) {
Matcher matcher = this.compiledPatterns[patternIndex].matcher (pattern);
return matcher.matches();
}Advisor: