Spring中基于aop命名空间的AOP一(一点准备工作和一个例子)

在某些时候,我们工程中使用的JDK 不一定就是1.5 以上,也就是说可能不支持Annotation 注解,这时自然也就不能使用@AspectJ 注解驱动的AOP 了,那么如果我们仍然想使用AspectJ 灵活的切入点表达式,那么该如何呢?Spring 为我们提供了基于xml schematic 的aop 命名空间,它的使用方式和@AspectJ 注解类似,不同的是配置信息从注解中转移到了Spring 配置文件中。在这里,我们将详细介绍如何使用Spring 提供的 标签来配置Spring AOP 。

1 、一点准备工作和一个例子

使用 标签,需要给Spring 配置文件中引入基于xml schema 的Spring AOP 命名空间。完成后的Spring 配置文件如下(在该节,所有例程的配置文件中添加了Spring AOP 命名空间,除非特殊情况外,为了节约空间,这部分将在给出的代码中省略),粗体内容即为我们需要添加的内容:

代码

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd >………… Spring配置信息

关于aop命名空间的标签,我们前面使用过的有,在这一节,我们将以标签作为重点。事实上,我们在这一节介绍的所有标签都是该标签的子标签。

下面有一个例程来直观的展示如何使用标签来配置Spring AOP(完整代码见例程4.15)。在例子中,我们使用配置一个切面并拦截目标对象Peoples的SayHello()方法,在它执行前输出提示信息。

首先创建工程AOP_Test4.15,添加Spring IoC和Spring AOP库后,创建aop.test包,新建目标类People,代码如下:

代码

package aop.test;/*** 该类将作为目标对象对应的类。* @author zhangyong* */public class People{public String SayHello(String str){System.out.println(this.getClass().getName()+ "说:"+str);return str;}}

修改Spring xml配置文件,将该类注册为一个受管Bean:

代码

创建含有main()方法的测试类TestMain,从Spring IoC容器中获取Peoples对象,并调用其SayHello()方法,代码如下:

代码

package aop.test;// import省略public class TestMain {public static void main(String[] args) {// 实例化Spring IoC容器ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取受管Bean的实例People p = (People) ac.getBean("TestBean");p.SayHello("传入的参数值");}}

创建MyAspect类,添加一个beforeAdvice()方法作为前置通知方法,代码如下:

代码

package aop.test;import org.aspectj.lang.JoinPoint;public class MyAspect {public void beforeAdvice(JoinPoint point) {System.out.println("前置通知被触发:" +point.getTarget().getClass().getName()+"将要" + point.getSignature().getName());}}

修改xml配置文件,为其添加aop命名空间,并把MyAspect注册为一个受管Bean,作为我们下面定义切面的backing bean。代码如下:

代码

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd">expression="execution(* aop..*(..))" />method="beforeAdvice" />

运行主类,输出如下:

例程4.15输出结果

本文地址:http://www.blogjava.net/cmzy/archive/2008/08/23/223870.html

爱的力量大到可以使人忘记一切,却又小到连一粒嫉妒的沙石也不能容纳

Spring中基于aop命名空间的AOP一(一点准备工作和一个例子)

相关文章:

你感兴趣的文章:

标签云: