上一文中 讲了Annotation如何配置AOP,地址如下:http://5148737.blog.51cto.com/5138737/1428048


使用同样的bean,用xml来实现一下:


  1. Hello.java 接口




定义了三个方法:

package com.xj.bean.aop;public interface Hello {public void addHello();   //添加方法public void deleteHello();  //删除方法public void findHello();
}

2.HelloImpl.java实现类

实现了接口中的三个方法,简单的打印

package com.xj.bean.aop;
public class HelloImpl implements Hello{@Overridepublic void addHello() {System.out.println("add");}@Overridepublic void deleteHello() {System.out.println("delete");}@Overridepublic void findHello() {System.out.println("find");}}

3.HelloProxy.java(所谓的Aspect)

不再使用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.xml

<?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.xsdhttp://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.测试

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方法之后打印日志