spring AOP實現——xml方法

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


使用一樣的bean,用xml來實現一下:spring


  1. 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方法以後打印日誌
相關文章
相關標籤/搜索