切面 = 增强 + 切点(连接点为目标类的特定方法)
切面 = 增强(连接点为目标类的所有方法)
增强包含连接点的方位和织入代码,切点包含执行点信息(哪些类的哪些方法)
切点
org.springframework.aop.Pointcut接口描述切点
Pointcut由ClassFilter和MethodMatcher构成
ClassFilter
定位到特定类上
matches(Class clazz)用来判别被检测的类是否匹配过滤条件
MethodMatcher
定位到特定方法上
matches(Method m,Class targetClass)静态方法匹配器,匹配方法签名,仅一次
matches(Method m,Class targetClass,Object[] args)动态方法匹配器,在运行期检查方法入参的值,每次调用都匹配
isRuntime()返回false表示静态方法匹配器,返回true表示动态方法匹配器
切点类型
静态方法切点
抽象基类org.springframework.aop.support.StaticMethodMatcherPointcut默认匹配所有类
子类NameMatchMethodPointcut字符串匹配
子类AbstractRegexpMethodPointcut正则匹配
动态方法切点
抽象基类org.springframework.aop.support.DynamicMethodMatcherPointcut默认匹配所有类,已过时,可用DefaultPointCutAdvice和DynamicMethodMatcherPointcut替代。
注解切点
org.springframework.aop.support.annotation.AnnotationMatchingPointcut支持在Bean中直接通过JDK5.0注解标签定义的切点
表达式切点
org.springframework.aop.support.ExpressionPointcut支持AspectJ切点表达式
流程切点
org.springframework.aop.support.ControlFlowPointcut根据程序执行的堆栈信息查看目标方法是否由某一个方法直接或间接发起调用,以此判断是否为匹配的连接点。
复合切点
org.springframework.aop.support.ComposablePointcut可创建多个切点
切面类型
Advice
一般切面,仅包含Advice,连接点是目标类的所有方法。
PointcutAdvice
切点切面,包含Advice和Pointcut,连接点是目标类的特定方法。
IntroductionAdvice
引介切面,包含IntroductionInterceptor和Pointcut,类级别。
静态普通方法名匹配切面
定义切点
public class GreetingAdvisor extends StaticMethodMatcherPointcut{
public boolean matches(Method method, Class clazz){//切点方法
return "greetTo".equals(method.getName());
}
public ClassFilter getClassFilter(){//切点类
return new ClassFilter(){
public boolean matcher(Class clazz){
return Waiter.class.isAssignableFrom(clazz);
}
}
}
}
定义增强
public class GreetingBeforeAdvice implements MethodBeforeAdvice{
public void before(Method method, Object[] args, Object obj) throws Throwable{
//...
}
}
配置切面
<!-- 目标类 -->
<bean id="waiterTarget" class="com.smart.advisor.Waiter" />
<bean id="sellerTarget" class="com.smart.advisor.Seller" />
<!-- 前置增强 -->
<bean id="beforeAdvice" class="com.smart.advisor.GreetingBeforeAdvice" />
<!-- 切面,advice-增强,classFilter-类匹配过滤器,order-切面织入时的顺序 -->
<bean id="greetingAdvisor" class="com.smart.advisor.GreetingAdvisor"
p:advice-ref="beforeAdvice"/>
<!-- 父bean,定义公共配置信息 -->
<bean id="parent" abstract="true"
class="org.springframework.ProxyFactoryBean"
p:interceptorNames="greetingAdvisor"
p:proxyTargetClass="true"/>
<!-- 代理bean -->
<bean id="waiter" parent="parent" p:tartget-ref="waiterTarget"/>
<bean id="seller" parent="parent" p:tartget-ref="sellerTarget"/>
静态正则表达式方法匹配切面
<!-- 匹配目标类方法的全限定名 -->
<bean id="regexpAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"
p:advice-ref="beforeAdvice">
<property name="patterns">
<list><value>.*greet.*</value></list>
</property>
</bean>
<bean id="parent" class="org.springframework.ProxyFactoryBean"
p:interceptorNames="greetingAdvisor"
p:target-ref="waiterTarget"
p:proxyTargetClass="true"/>
分享到:
相关推荐
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
学习Spring开发的AOP面向切面编程时所需要的jar包,包括com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
**Spring AOP切面编程简介** 在Java世界中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许我们分离关注点,将横切关注点(如日志、事务管理、性能监控等)与业务逻辑代码解耦。...
例如,可能会有一个自定义的MyBatis拦截器用于分页查询,一个Spring AOP切面用于记录操作日志,Spring事务管理确保数据的一致性,而反射工具类可能用于动态加载配置或处理某些通用的反射任务。通过这些组件的组合,...
为了解决这一问题,可以利用Spring框架中的AOP(Aspect Oriented Programming,面向切面编程)技术来实现。 #### 二、Spring AOP 概述 Spring AOP 是Spring框架提供的一种实现AOP的方法。通过AOP,开发者可以在不...
在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序进行横向关注点的插入,比如日志记录、事务管理、权限检查等。在这里,我们重点关注如何利用Spring AOP实现分层...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改源代码的情况下,对程序的关键行为进行增强或监控。本项目旨在演示如何在Spring AOP中添加日志功能,以实现对应用程序执行过程的透明跟踪...
2、面向切面编程AOP 在实现过程中,我尽量贴近实际开发与场景,麻雀虽小,五脏俱全,个人感觉这个项目是web框架搭建的一个极简之道实践。 项目中可能还存在很多的问题,希望大家不吝赐教,谢谢。
最近公司要求和别的公司对接,但是不想破坏原有的架构,就只有用切面了,百度了下都不全面,就自己写了个小demo,只要导入spring4.2.3的jar就直接可以用,注解实现spingaop机制,1分意思下
在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...
在Spring AOP(面向切面编程)中,AspectJ是一个重要的扩展工具,它允许开发者以声明式的方式实现切面,增强了Spring框架的功能。在提供的文件列表中,我们看到`aspectjweaver-1.5.3.jar`, `aspectj-1.9.6.jar`, 和 ...
**Spring AOP 切面实例详解** 在软件开发中,面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,它旨在提高代码的可复用性和模块化,通过将关注点分离来简化系统设计。Spring 框架提供了对 ...
在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...
深入讲解Spring应用中重要的一部分AOP--面向切面编程
Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...
Spring框架提供了强大的AOP支持,本文将以一次演出为例,详细介绍如何在Spring环境中构建一个简单的AOP切面,并进行相应的测试。 #### 二、基本概念介绍 1. **切点(Pointcut)**:定义了何处执行切面代码的位置。在...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...
2. **定义切面**:创建一个Spring AOP切面,这个切面将包含一个或多个通知(advice),用于拦截特定的数据库操作。例如,我们可以创建一个`@Before`通知,检查方法的注解或方法名,以判断是读操作还是写操作。 3. *...