【Spring 】【AOP】XML開發

一、使用AOP進行單元測試

1.引入jar包

2.引入xml提示(爲XML AOP做準備,可有可無)

http://www.springframework.org/schema/aop/spring-aop.xsd

在window->preference->輸入xml,找到xml catalog-->add,url填上面那個,選擇filesystem,選對應的.xsd文件

3.新增測試類,添加註解

package com.testSpring.AOP.test;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.testSpring.AOP.Dao.UserDao;


//使用AOP的單元測試
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:app.xml")
public class demo1 {
@Resource(name="UserDao")//注入待測對象
	private UserDao user;
	
	@Test
	public void test1() {
		/*ApplicationContext context = new ClassPathXmlApplicationContext("app.xml");
		UserDao user = (UserDao)context.getBean("UserDao");
		user*/
//測試對象方法
		user.delete();
		user.update();
		user.query();
		user.add();
	}
	
}

4.運行測試(快捷鍵 alt+shift +x,t)

二、AOP 的xml開發

0.必要知識

專業用語:切入點,織入,

通知類型:

0.1.前置通知

獲得切入點信息

	public static void getMD5(JoinPoint joinpoint) {
        String methodName = joinpoint.getSignature().getName();
        List<Object> args = Arrays.asList(joinpoint.getArgs());
        
        System.out.println("The method " + methodName + " begins with " + args);
	}
	

<aop:config>
        <aop:pointcut expression="execution(* com.testSpring.AOP.Dao.UserDao.add(int))" id="pointCut1"/>
        <aop:aspect ref="MD5Utils">
            <aop:before method="getMD5"  pointcut-ref="pointCut1" arg-names="joinpoint"/>

        </aop:aspect>
    
    </aop:config>

0.2後置通知

//被增強方法示例
	public String update() {
		System.out.println("update method excuting ....");
		return "update string";
	}
//增強方法
public static void getMD5Del(Object result) {
        
        System.out.println("被增強方法的返回值是" + result);
	}
//xml中的配置:
	<aop:config>
	
		<aop:pointcut expression="execution(* com.testSpring.AOP.Dao.UserDao.delete(..)))" id="pointCut2"/>
		
		
		<aop:aspect ref="MD5Utils">
			
			<aop:after-returning method="getMD5Del" pointcut-ref="pointCut2"  returning="result"/>
			
		
		</aop:aspect>
	
	</aop:config>

0.3環繞通知
 

//要增強的方法
public String update() {
		System.out.println("update method excuting ....");
		return "update string";
	}
//增強方法
public static void getMD5Up(ProceedingJoinPoint joinpoint) throws Throwable {
		System.out.println("around before");
		Object obj = joinpoint.proceed();
        System.out.println("return value is" + (String)obj);
        System.out.println("around after");
		
	}
//XML中的配置
<aop:config>
		
		<aop:pointcut expression="execution(* com.testSpring.AOP.Dao.UserDao.update(..)))" id="pointCut3"/>
		
		<aop:aspect ref="MD5Utils">
			
			<aop:around method="getMD5Up" pointcut-ref="pointCut3"/>			
			
		</aop:aspect>
	
	</aop:config>

0.4異常拋出通知
 

//配置增強方法
	public static void throwEx(Exception ex) {
		System.out.println("ex");
	}
//XML中的配置
<aop:config>

		<aop:pointcut expression="execution(* com.testSpring.AOP.Dao.UserDao.query(..)))" id="pointCut4"/>
		
		<aop:aspect ref="MD5Utils">
		

			<aop:after-throwing method="throwEx"  pointcut-ref="pointCut4" throwing="ex"/>		
			
		</aop:aspect>
	
	</aop:config>

0.5最終通知
 

//增強方法
public static void finallyRun() {
		System.out.println("最終通知");
	}
//XML中的配置
<aop:after method="finallyRun" pointcut-ref="pointCut4"/>

0.6引介通知

 

 

1.編寫切面類

2.配置xml

步驟:首先配置bean,要增強的類,和增強類。配置切面配置aop:config,加入切入點aop:pointcut.expression中的符號*是任意返回值,..是入參。最後是切面引用,ref引用增強類,什麼時候增強,aop:before|after|around,切入點引用 point-cut,要增強的方法method.

 

    <bean id="UserDao" class="com.testSpring.AOP.Dao.UserDao"></bean>
    <bean id="MD5Utils" class="com.testSpring.AOP.Utils.MD5Utils"></bean>
    
    <aop:config>
        <aop:pointcut expression="execution(* com.testSpring.AOP.Dao.UserDao.add(..))" id="pointCut1"/>
        <aop:aspect ref="MD5Utils">
            <aop:before method="getMD5()"  pointcut-ref="pointCut1"/>
        </aop:aspect>
    </aop:config>
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章