在某些时候,我们工程中使用的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
爱的力量大到可以使人忘记一切,却又小到连一粒嫉妒的沙石也不能容纳