`

Spring中的Advisor,Advice,Pointcut

    博客分类:
  • ssh
阅读更多

一、Spring中的Advisor,Advice,Point概述

1、Advisor:充当Advice和Pointcut的适配器,类似使用Aspect的@Aspect注解的类(前一章节所述)。一般有advice和pointcut属性。

祖先接口为org.springframework.aop.Advisor,应用中可直接使用org.springframework.aop.support.DefaultPointcutAdvisor

 

2、Advice:用于定义拦截行为,祖先接口为org.aopalliance.aop.Advice,该接口只是标识接口,应用中可直接实现BeforeAdvice ,ThrowsAdvice,MethodInterceptor ,AfterReturningAdvice ,IntroductionInterceptor 等子接口

3、Pointcut:用于定义拦截目标集合,祖先接口为org.springframework.aop.Pointcut

 

二、Spring中的Advisor,Advice,Point的应用

1、编写Advisor实现类

在此可直接使用org.springframework.aop.support.DefaultPointcutAdvisor

 

2、编写Advice实现类

public class PlayAdvice implements MethodBeforeAdvice{
 public void before(Method method, Object[] args, Object target)
   throws Throwable {
  System.out.println("my before advice");
 // method.invoke(target, args); 如果再调用这句,则目标方法会执行多一次
 }
}

 

3、编写Pointcut实现类
public class PlayPointcut implements Pointcut {
 public ClassFilter getClassFilter() {
  return new PlayClassFilter();
 }
 public MethodMatcher getMethodMatcher() {
  return new PlayMethodMatcher();
 }
}
//PlayClassFilter的定义

class PlayClassFilter implements ClassFilter {
 public boolean matches(Class clazz) {
  if(clazz.getSimpleName().equals("Play"))
   return true;
  return false;
 }
}

//PlayMethodMatcher的定义

class PlayMethodMatcher implements MethodMatcher {
 public boolean isRuntime() {
  return true;
 }
 public boolean matches(Method method, Class c) {
  if(c.getSimpleName().equals("Play")&&method.getName().contains("Service"))
   return true;
  return false;
 }
 public boolean matches(Method method, Class c, Object[] args) {
  if(c.getSimpleName().equals("Play")&&method.getName().contains("Service"))
   return true;
  return false;
 }
}

 

4、编写目标类


public class Play {

  public void playService(String what){
  System.out.println("play "+what);
 }
}

5、在配置文件中配置


<bean id="adviceBean" class="com.hss.sp.aop.PlayAdvice"/>
<bean id="pointcutBean" class="com.hss.sp.aop.PlayPointcut"/>
<bean id="playService" class="com.hss.sp.service.Play"/>
<bean
   class="org.springframework.aop.support.DefaultPointcutAdvisor">
   <property name="advice" ref="adviceBean"></property>
   <property name="pointcut" ref="pointcutBean"></property>
</bean>

 

6、测试,结果

 BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");
  Play play=(Play)bf.getBean("playService");
  play.playService("pingpong");

输出:

my before advice
play pingpong

 

0
3
分享到:
评论

相关推荐

    Spring AOP Example – Pointcut , Advisor

    通常,我们会创建一个切面类(Aspect),在这个类中定义pointcut和advice,然后在Spring配置文件中声明这个切面,使其生效。例如: ```java @Aspect public class LoggingAspect { @Before("execution(* ...

    详解Spring 框架中切入点 pointcut 表达式的常用写法

    在示例中,`&lt;aop:advisor&gt;`元素使用了`&lt;tx:advice&gt;`来定义事务管理策略。`&lt;tx:method&gt;`元素用于指定不同方法名前缀(如`delete*`,`save*`,`update*`)对应的事务属性,如回滚规则。通过将这些配置与切入点表达式`...

    SPRING:aspect和advisor区别

    ### Spring中的Aspect与Advisor区别详解 #### 一、引言 在Spring框架中,面向切面编程(AOP)是一种非常强大的技术,它允许开发者将横切关注点(如日志记录、安全性检查等)从业务逻辑中分离出来。本文旨在深入...

    Spring AOP 拦截器 Advisor

    在 Spring AOP 中,Advisor 是一个组合了通知(Advice)和切入点(Pointcut)的对象,它定义了何时以及如何执行特定的操作。 首先,我们要理解 AOP(面向切面编程)的核心概念。AOP 是一种编程范式,旨在减少代码...

    Spring AOP - Advice

    Advice在Spring AOP中扮演着关键角色,它是切面的具体实现,即在特定连接点(Join Point)执行的代码片段。 **Advice类型** 1. **Before Advice**:在目标方法被调用之前执行,可以用来进行预处理或验证。例如,它...

    Spring AOP中文教程

    总之,Spring AOP是Java开发中实现关注点分离的强大工具,通过理解advice、pointcut和advisor这三个核心概念,我们可以有效地利用它来提高代码的可维护性和可扩展性。对于初学者来说,通过实践和理解这些概念,可以...

    spring aop 详细介绍

    Advisor是Pointcut和Advice的组合,它将Pointcut表达式与Advice逻辑结合起来,使得在满足Pointcut条件的连接点上应用Advice变得简单。 4. **准备工作**: 在使用Spring AOP之前,需要设置开发环境,包括JDK、...

    spring-aop源码解读

    在Spring AOP中,主要有三个核心概念:Advice、Pointcut和Advisor。 1. Advice(通知): Advice描述了在特定连接点(Join Point)上执行的动作。在Spring AOP中,Advice主要与方法调用相关,用于向现有方法添加...

    pointcut表达式and or not在xml中配置

    在Spring AOP框架中,Pointcut(切入点)是AOP的核心概念之一,它定义了哪些Joinpoint(连接点)会被通知(Advice)所影响。在实际开发过程中,我们常常需要对切入点进行更精细的控制,例如只对某些方法或类应用增强...

    Spring AOP实现

    Spring AOP的配置通常在Spring的XML配置文件中完成,通过`&lt;aop:config&gt;`标签开启AOP支持,然后使用`&lt;aop:advisor&gt;`定义Advisor,指定advice和pointcut。在例子中,BeanImpl类的theMethod()方法会在执行前调用`...

    Spring源代码解析(五):Spring_AOP获取Proxy.doc

    总的来说,Spring AOP通过组合Advice、Pointcut和Advisor,以及使用`ProxyFactoryBean`生成的代理对象,实现了面向切面的编程。这种机制使得我们可以优雅地解耦关注点,提高代码的可维护性和可扩展性。通过深入理解...

    spring 源码中文注释

    在源码中,`Advisor`、`Pointcut`和`Advice`等接口是描述切面的关键,而`ProxyFactoryBean`或`AspectJAutoProxyCreator`则是创建代理对象的工具。 Spring还提供了大量的模块,如数据访问/集成(DAO)、Web MVC、JMS...

    Spring AOP

    Spring AOP的配置通常是在Spring的XML配置文件中完成的,通过`&lt;aop:config&gt;`标签定义Advisor,`&lt;aop:pointcut&gt;`定义Pointcut,并使用`&lt;aop:advisor&gt;`将Advice和Pointcut关联起来。此外,Spring还支持基于注解的AOP...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”...

    spring源码详解

    是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码 三、AOP实现方式 依据织入方式的不同,分为 1、编译期织入 2、类加载器织入 3、动态代理织入 AspectJ:1,2 Spring AOP:3

    应用Spring AOP(二)-------通过Advisor指定切入点

    在本篇博文中,我们将深入探讨Spring AOP(面向切面编程)的使用,特别是如何通过Advisor指定切入点。Spring AOP是Spring框架的核心组件之一,它允许我们在不修改业务代码的情况下,实现对程序运行时行为的拦截和...

    spring中事物配置

    &lt;aop:advisor pointcut-ref="businessServiceMethods" advice-ref="transactionAdvice"/&gt; ``` 上述配置表示,所有`com.example.service`包下的类的所有公共方法都将应用事务通知。 4. **被注入的目标对象**:...

    spring代码课堂笔记

    Advice PointCut (次要业务) (目标对象和目标方法) ClassFilter MethodMatcher (判断当前被拦截对象是不是当前顾问需要管理对象) (当前被拦截的方法是不是我们所需要主要业务方法) person对象。eat()

    spring事务与数据库操作

    &lt;aop:advisor advice-ref="txAdvice" pointcut-ref="businessServicePointcut"/&gt; ``` 这段代码配置了一个事务管理器,并定义了一个事务顾问(`tx:advice`),该顾问指定了不同方法名前缀对应的不同事务传播行为。...

Global site tag (gtag.js) - Google Analytics