`

Spring中的Advisor,Advice,Pointcut

阅读更多

Spring中的Advisor,Advice,Pointcut  .

一、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

 

 

分享到:
评论

相关推荐

    Spring AOP中文教程

    Spring framework是很有前途的AOP技术。作为一种非侵略性的,轻型的AOP framework,你无需使用预编译器或其他的元标签,便可以在Java...advisor是pointcut和advice的装配器,是将advice注入主程序中预定义位置的代码。

    spring源码详解

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

    spring代码课堂笔记

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

    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 aop 详细介绍

    一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍

    AOP-SPRING-APPLICATION:面向方面的编程,它们的术语,方面,实现类,建议,Advisor it与Pointcut和Advice的关系然后....................................

    面向方面的编程,它们的术语,方面,实现类,建议,Advisor it与Pointcut和Advice的关系然后.................................... 明确的联合点---------&gt;为其库目标对象代理...........&gt;结合业务方法及其建议

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    开源框架 Spring Gossip

    Before Advice After Advice Around Advice Throw Advice Pointcut、Advisor Pointcut 定义了 Advice 的应用时机,在 Spring 中,使用 PointcutAdvisor 将 Pointcut 与 Advice 结合成为一个...

    Spring 2.0 开发参考手册

    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. 使用...

    struts2.3+hibernate3.6+spring3.1整合的纯xml配置的小项目

    &lt;aop:advisor pointcut-ref="noTxServiceOperation" advice-ref="noTxAdvice" /&gt; &lt;tx:advice id="defaultTxAdvice"&gt; *" read-only="true" /&gt; *" /&gt; &lt;/tx:advice&gt; &lt;tx:advice id=...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    spring chm文档

    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 applicationContext 配置文件

    &lt;aop:advisor pointcut-ref="allManagerMethodPdm" advice-ref="txAdvicePdm"/&gt; &lt;/aop:config&gt; &lt;!-- ibatis插件 --&gt; &lt;bean id="sqlMapClient" class="org.springframework.orm.ibatis....

    springmvc-ibatis

    &lt;aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService"/&gt; &lt;!-- 配置那个类那个方法用到事务处理 --&gt; &lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt; *" read-...

    Maven拆分代码.zip

    &lt;!--配置连接池--&gt; &lt;!--配置生产SqlSession对象的工厂--&gt; &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; ... &lt;aop:advisor advice-ref="advice" pointcut-ref=

    spring3.2+strut2+hibernate4

    -- &lt;aop:advisor advice-ref="myAdvice" pointcut-ref="myPointcut"/&gt;--&gt; &lt;!-- &lt;/aop:config&gt;--&gt; &lt;!--AOP代表的意思: // 所有符合pointcut条件的类或方法,都执行myAdvice建议,advice里定义了,所有的save方法...

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    JTA事务源码示例

    &lt;aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/&gt; &lt;!-- 通知配置 --&gt; &lt;tx:advice id="txAdvice" transaction-manager="myJtaManager"&gt; *" rollback-for="Exception"/&gt; *" rollback-...

    SSH第7章上机.zip ACCP8.0

    &lt;aop:advisor advice-ref="transactionAdvice" pointcut-ref="transactionPointCut"/&gt; spring和struts2的整合 加入整合包 加入struts的必须包 struts整合spring的包 struts2-spring-plugin-2.3.15.3.jar spring...

    ssh框架在application.xml中配置数据源所需jar

    &lt;!-- - Application context definition for JPetStore's business layer. ... &lt;aop:advisor pointcut="execution(* com.longxian.drp.manager.*.*(..))" advice-ref="txAdvice"/&gt; &lt;/aop:config&gt; &lt;/beans&gt;

Global site tag (gtag.js) - Google Analytics