Spring的AOP的基于AspectJ注解开发
将applicationContext.xml配置文件中的<aop:config></aop:config>中的内容,通过注解的方式,配置到切面类上。
1.1.1.1 创建项目,引入jar包
1.1.1.2 开始编写
将要被增强的类:
applicationcontext.xml的编写
测试类的编写:
1.1.2 Spring的注解的AOP的通知类型
1.1.2.1 @Before :前置通知
1.1.2.2 @AfterReturning :后置通知
1.1.3 Spring的注解的AOP的切入点的配置
1.1.3.1 Spring的AOP的注解切入点的配置
上述的设置,只针对单个方法配置单个通知
但是当我们希望有一个方法,拥有多个通知的时候,我们可以使用这种方法
将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(){};