上一文中 讲了Annotation如何配置AOP,地址以下:http://5148737.blog.51cto.com/5138737/1428048java
使用一样的bean,用xml来实现一下:spring
Hello.java 接口express
定义了三个方法:app
package com.xj.bean.aop; public interface Hello { public void addHello(); //添加方法 public void deleteHello(); //删除方法 public void findHello(); }
2.HelloImpl.java实现类ide
实现了接口中的三个方法,简单的打印测试
package com.xj.bean.aop; public class HelloImpl implements Hello{ @Override public void addHello() { System.out.println("add"); } @Override public void deleteHello() { System.out.println("delete"); } @Override public void findHello() { System.out.println("find"); } }
3.HelloProxy.java(所谓的Aspect)spa
再也不使用annotation,因此注解去掉,里面的两个校验方法,在执行以前打印日志,执行以后打印日志。日志
package com.xj.bean.aop; public class HelloProxy { //准备在每一个方法执行以前打印日志 private void beforeLog(){ System.out.println("check add"); } //准备在每一个方法执行以后打印日志 private void afterLog(){ System.out.println("after check delete"); } }
4.ApplicationContext.xmlxml
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd "> <!-- <aop:aspectj-autoproxy/> xml方法不须要开启aspectj的注解--> <bean id="hello" class="com.xj.bean.aop.HelloImpl"/> <!--定义普通的bean--> <bean id="helloProxy" class="com.xj.bean.aop.HelloProxy"/> <!--定义Aspect的bean--> <!--Aop的xml配置,均采用aop:开头,而且都方法aop:config中--> <aop:config> <!-- 定义aspect,ref引用所在的bean--> <aop:aspect ref="helloProxy"> <!--定义pointcut:即特殊功能的执行范围--> <aop:pointcut id="addMethod" expression="execution(* com.xj.bean.aop.*.add*(..))"/> <aop:pointcut id="deleteMethod" expression="execution(* com.xj.bean.aop.*.delete*(..))"/> <!-- 定义advice,即执行时机,为after、before、throwing等--> <aop:before method="beforeLog" pointcut-ref="addMethod"/> <aop:after method="afterLog" pointcut-ref="deleteMethod"/> </aop:aspect> </aop:config> </beans>
5.测试blog
ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml"); Hello hello = (Hello)context.getBean("hello"); hello.addHello(); hello.deleteHello();
6.结果
能够看出来,结果和annotation相同。
before check add //add方法以前打印日志 add delete after check delete //delete方法以后打印日志