上一文中 講了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方法以後打印日誌