使用Spring 2.0新特性实现前置通知--基于Schema方式

原创 2007年10月11日 17:23:00

在使用Spring 2.0 Schema方式的aop实现中,我们的通知,不再需要实现Spring的接口,如:

 

package AOP2Schema;

import org.aspectj.lang.JoinPoint;

//不需要在实现MethodBeforeAdvise
public class LogBeforeAdvice {
  
public void before(JoinPoint joinPoint){
      System.out.println(
"log before service");
     
  }

}

 为了使用Spring 2.0基于XML Schema的AOP设置方式,您必须在XML设档的开头加入AOP的names

 

<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

 

加入相应的namespace后,就可以使用spring的aop标签了

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件Schemal需要改变 -->
<beans
    
xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop
="http://www.springframework.org/schema/aop"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
>
    
    
    
<!-- 加入aop名称空间后,就可以使用spring2.0的标签aop了 -->
    
<bean id="logBeforeAdvise" class="AOP2Schema.LogBeforeAdvice"/>
    
<bean id="helloSpeaker" class="AOP2Schema.HelloSpeaker"/>
    
<aop:config>
       
<aop:aspect id="logging" ref="logBeforeAdvise">
          
<aop:before pointcut="execution(* AOP2Schema.ISpeaker.* (..))" method="before"/>
       
</aop:aspect>
    
</aop:config>
    
</beans>

服务接口及实现:

 

package AOP2Schema;

public class HelloSpeaker implements ISpeaker {

    
public void speak() {
        System.out.println(
"speak");
    }

    
public void say() {
        System.out.println(
"say");
    }

   
}


package AOP2Schema;

public interface ISpeaker {
  
public void speak();
  
public void say();
}

 

对上面的aop标签解释一下:

首先可以看到,不需要明确声明ProxyFactoryBean了,所有AOP配置是在aop:confg标签中设置的,aop:spect标签定义Aspect的实现,也就是advise

<aop:before>标签表示设置Advice将作为Before Advise,“pointcut”属性定义PointCut表达式,以上定义了三个部:传回值,方法名和参数类型

*  表示任何返回值类型都符合

AOP2Schema.ISpeaker.*  表示ISpeaker接口里的所有方法都复合

(..) 表示任何参数类型声明符合

我们只要在测试代码中直接获取helloSpeaker,spring就可以自动按配置建立代理对象,并调用相应的advise

 

 

package AOP2Schema;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSpring{
  
public static void main(String args[])  throws Exception{
  
    ApplicationContext ctx
=new ClassPathXmlApplicationContext("AOP2Schema/applicationContext.xml");
    
    ISpeaker speaker
=(ISpeaker)ctx.getBean("helloSpeaker");
    
    speaker.speak();
    speaker.say();
   
  }

}

 

测试结果:

log before service
speak
log before service
say

Spring 4.x框架中的新特性---Spring4.0框架的新功能和改善

2004年Spring框架首次发布,然后陆续发布了一些重要的版本:Spring2.0提供XML命名空间和AspectJ的支持;Spring2.5包含了注释驱动配置;Spring3.0在框架基础代码中引...
  • FireOfStar
  • FireOfStar
  • 2015年11月11日 19:48
  • 12821

Spring Boot 2.0.0参考手册_中英文对照_Part I

Part I. Spring Boot Documentation
  • Quincuntial
  • Quincuntial
  • 2016年10月08日 22:27
  • 2568

Spring aop 前置通知、后置通知、返回通知、 异常通知 、后置通知

Spring AOP定义切面 Ⅰ 首先介绍一下写Spring Aop思路  一、首先在项目中加入aop所需要的jar aopalliance-1.0.jar aspectjweaver-1.6.11...
  • likun557
  • likun557
  • 2016年11月10日 13:36
  • 2953

黑马程序员--Spring Aop 面向切面编程,实现前置通知

 Spring Aop 面向切面编程,实现前置通知耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中个模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就...
  • whf769
  • whf769
  • 2011年06月10日 12:12
  • 548

Spring AOP 面向切面编程 常见通知实现(前置,后置,环绕,异常)

AOP(Aspect-Oriented Programming) 1.面向切面编程 2.对传统的oop的补充 3.不是取代oop,经常和oop一起使用 切面:需要实现的交叉功能...
  • liu857279611
  • liu857279611
  • 2017年04月14日 20:20
  • 261

Spring--AOP-前置通知

创建前置通知类: 在spring容器中注册: 注册代理对象: 测试: 结果:...
  • sinat_27115575
  • sinat_27115575
  • 2017年05月27日 17:11
  • 222

Spring框架——AOP前置通知

前置通知( Advice): 在方法调用前自定义操作。比如方法调用时的log记录、计时、登陆验证等。下面以log记录为例说明。 步骤: 1. 定义接口 2. 编写对象(被代理对象=目标对象) 3. ...
  • tingzhiyi
  • tingzhiyi
  • 2016年08月05日 19:54
  • 714

Spring之AOP(二)---前置通知

一、首先我要加入jar包:com.springsource.org.aopaaliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RE...
  • u013161241
  • u013161241
  • 2016年09月29日 08:25
  • 115

Spring框架——AOP前置、后置、环绕、异常通知

通知类型: 步骤: 1. 定义接口 2. 编写对象(被代理对象=目标对象) 3. 编写通知(前置通知目标方法调用前调用) 4. 在beans.xml文件配置 ...
  • tingzhiyi
  • tingzhiyi
  • 2016年08月05日 21:21
  • 3716

spring 2.0 到3.0的新特性及理解

2.5的新特性  Spring2.5rc1发布了,一直想知道它葫芦里卖什么药,以下是文档里的change.log  1. JDK版本: JDK至少要1.4.2以上,如果仍然打算使用1....
  • chinapi_hzh
  • chinapi_hzh
  • 2015年10月26日 14:59
  • 343
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Spring 2.0新特性实现前置通知--基于Schema方式
举报原因:
原因补充:

(最多只允许输入30个字)