Spring_day02_11(AspectJ的开发)

                                                                Spring的AOP的基于AspectJ注解开发
将applicationContext.xml配置文件中的<aop:config></aop:config>中的内容,通过注解的方式,配置到切面类上。
1.1.1.1 创建项目,引入jar包
 
1.1.1.2 开始编写
将要被增强的类:
public class OrderDao {
	public void save(){
		System.out.println("保存订单");
	}
	public String delete(){
		System.out.println("删除订单");
		return "删除成功";
	}
	public void find(){
		System.out.println("查看订单");
		int avg = 124/0;
	}
	public void update(){
		System.out.println("更改订单");
	}
}

applicationcontext.xml的编写
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx.xsd">
	将目标类控制反转到Spring
	<bean id="orderDao" class="com.liubo.spring.demo1.OrderDao"></bean>
	将切面类控制反转到Spring
	<bean id="myAspect" class="com.liubo.spring.demo1.MyAspect"></bean>
	<aop:aspectj-autoproxy/>
</beans>
切面类的编写:
@Aspect
public class MyAspect {
	@Before(value = "execution(* com.liubo.spring.demo1.OrderDao.save(..))")
	public void myBefore(){
		System.out.println("这是前置通知");
	}
}


测试类的编写:
public class SpringDemo1 {
	ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");

	@Test
	public void demo1() {
		OrderDao orderDao = ac.getBean("orderDao", OrderDao.class);
		orderDao.save();
	}

}

1.1.2 Spring的注解的AOP的通知类型
1.1.2.1 @Before :前置通知

1.1.2.2 @AfterReturning :后置通知
	@AfterReturning(value="execution(* com.liubo.spring.demo1.OrderDao.delete(..))",returning="result")
	public void myAfterReturn(Object result ){
		System.out.println("这是一个后置带返回值的通知"+"   "+result);
	}
1.1.2.3 @Around :环绕通知
	@Around(value="execution(* com.liubo.spring.demo1.OrderDao.update(..))")
	public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable{
		System.out.println("这是环绕通知的----前置通知");
		Object object = joinPoint.proceed();
		System.out.println("这是环绕通知的----后置通知");
		return object;
	}
1.1.2.4 @AfterThrowing :异常抛出通知
	@AfterThrowing(value="execution(* com.liubo.spring.demo1.OrderDao.find(..))",throwing="e")
	public void myThrowing(Throwable e){
		System.out.println("异常发生了");
		System.out.println(e.getMessage());
	}
1.1.2.5 @After :最终通知

1.1.3 Spring的注解的AOP的切入点的配置
1.1.3.1 Spring的AOP的注解切入点的配置
上述的设置,只针对单个方法配置单个通知
但是当我们希望有一个方法,拥有多个通知的时候,我们可以使用这种方法

	@AfterThrowing(value="MyAspect.pointcut1()",throwing="e")为切点增加通知
	public void myThrowing(Throwable e){
		System.out.println("异常发生了");
		System.out.println(e.getMessage());
	}
	
	@Pointcut(value="execution(* com.liubo.spring.demo1.OrderDao.find(..))") 配置切点
	private void pointcut1(){};







猜你喜欢

转载自blog.csdn.net/strawberry_uncle/article/details/80646126