Spring AOP之AspectJ的XML方式使用

(1)jar包

AOP联盟规范:com.springsource.org.aopalliance-1.0.0.jar

 spring aop实现:spring-aop-3.2.0.RELEASE.jar

aspectJ 框架的jar(实现、规范):com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

 spring aspect 支持:spring-aspects-3.2.0.RELEASE.jar

Spring AOP之AspectJ的XML方式使用_第1张图片

(2)切入点表达式

http://blog.csdn.net/yakoo5/article/details/17001381

(3)通知类型

  • AspectJ规定的通知类型不需要进行接口实现。通过配置文件确定类型。

  • 常用的有五种

1、before:前置通知(应用:各种校验)在方法执行前执行,

如果通知抛出异常,阻止方法运行。

2、afterReturning:后置通知(应用:常规数据处理)

方法正常返回后执行,如果方法中抛出异常,通知无法执行。

必须在方法执行后才执行,所以可以获得方法的返回值。

3、around:环绕通知(应用:十分强大,可以做任何事情)

方法执行前后分别执行,可以阻止方法的执

4、afterThrowing:抛出异常通知(应用:包装异常信息)

方法抛出异常后执行,如果方法没有抛出异常,无法执行

5、after:最终通知(应用:清理现场)

方法执行完毕后执行,无论方法中是否出现异常

(3)基于XML的代码实现 (参照黑马的例程)

Spring AOP之AspectJ的XML方式使用_第2张图片


TeacherService.java接口类

package com.itheima.d_aspectj_xml;

public interface TeacherService {
	
	public void addTeacher();
	public String updateTeacher();

}

TeacherServiceImpl.java实现类

package com.itheima.d_aspectj_xml;

public class TeacherServiceImpl implements TeacherService {

	@Override
	public void addTeacher() {
		System.out.println("d_aspect xml  add teacher");
		//int i = 1/0;
	}

	@Override
	public String updateTeacher() {
		System.out.println("d_aspect xml  update teacher");
		return "来来来";
	}

}

MyAspect.java类

package com.itheima.d_aspectj_xml;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 切面类,含多个通知
 * @author 传智•左慈
 *
 */
public class MyAspect {
	
	
	public void myBefore(JoinPoint joinPoint){
		System.out.println("前置通知, 方法名称:" + joinPoint.getSignature().getName());
	}
	
	public void myAfterReturning(JoinPoint joinPoint,Object xxx){
		System.out.println("后置通知, 返回值:" + xxx);
	}
	
	public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable{
		
		System.out.println("前");
		//必须执行目标方法
		Object obj = joinPoint.proceed();
		
		System.out.println("后");
		return obj;
	}
	
	public void myAfterThrowing(JoinPoint joinPoint, Throwable e){
		System.out.println("抛出异常通知, " + e.getMessage());
	}
	
	public void myAfter(){
		System.out.println("最终");
	}

}

beans.xml的配置文件



	
	
	
	
	
	
		
			
			
			
						
		
		
	
	
	
	
	

TestApp.java单元测试类

package com.itheima.d_aspectj_xml;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestApp {
	
	@Test
	public void demo01(){
		//获得目标类
		String xmlPath = "com/itheima/d_aspectj_xml/beans.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		TeacherService teacherService = (TeacherService) applicationContext.getBean("teacherServiceId");
		teacherService.addTeacher();
		teacherService.updateTeacher();
	}

}



你可能感兴趣的:(Web)