【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>
    

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