关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

云南大王-【从零开始学Spring笔记】AOP的注解开发

发布时间:2020-04-13 00:00:00
大家可以关注作者的账号,关注从零开始学Spring笔记文集。也可以根据目录前往作者的博客园博客进行学习。本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法。欢迎大家一起学习和讨论。 【从零开始学Spring笔记】Spring学习路线 创建项目测试 第一步:创建web项目,引入jar包 引入和AOP的XML开发同样的11个jar包 可以在以前下载解压后的libs文件夹中寻找,同时也上传到百度云了,下载即可。下载链接在本系列文集的第一篇【从零开始学Spring笔记】Spring4学习路线中寻找。 第二步:引入Spring的配置文件 在 src下创建applicationContext.xml 引入aop约束。 约束:spring framework-4.2.4.RELEASE\docs\spring framework-reference\htm|\xsd-configuration.html 观看本系列文集的【从零开始学Spring笔记】Spring配置,配置aop XML文件的提示。 第三步:编写目标类并配置 和之前一样,建立接口和实现类,并配置 第四步:编写一个切面类,并交给Spring package com.tyust.spring.demo1; public class MyAspect { public void before() { System.out.println("前置增强======================================"); } } 第五步:使用注解的AOP对象目标类进行增强 在切面类上使用增强 @Aspect public class MyAspect { @Before(value = "excution(* com.tyust.spring.demo1.OrderDao.save(..))") public void before() { System.out.println("前置增强======================================"); } } 第六步:编写测试类 package com.tyust.spring.demo1; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringDemo1 { @Resource(name = "orderDao") private OrderDao orderDao; @Test public void demo1() { orderDao.save(); orderDao.delete(); orderDao.update(); orderDao.find(); } } 输出结果 注解的AOP的通知的类型 package com.tyust.spring.demo1; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class MyAspect { @Before(value = "execution(* com.tyust.spring.demo1.OrderDao.save(..))") public void before() { System.out.println("前置增强======================================"); } @AfterReturning(value = "execution(* com.tyust.spring.demo1.OrderDao.delete(..))",returning = "result") public void afterReturning(Object result) { System.out.println("后置增强======================================"+ result); } @Around(value = "execution(* com.tyust.spring.demo1.OrderDao.update(..))") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("环绕qian增强======================================"); Object obj = joinPoint.proceed(); System.out.println("环绕hou增强======================================"); return obj; } @AfterThrowing(value = "execution(* com.tyust.spring.demo1.OrderDao.find(..))",throwing = "ex") public void afterThrowing(Throwable ex) { System.out.println("异常抛出增强======================================"+ex.getMessage()); } @After(value = "execution(* com.tyust.spring.demo1.OrderDao.find(..))") public void after() { System.out.println("最终增强======================================"); } } 输出结果 AOP的注解的切入点的注解 @Pointcut(value = "execution(* com.tyust.spring.demo1.OrderDao.find(..))") private void pointCut1() {} @After(value = "MyAspect.pointCut1()") public void after() { System.out.println("最终增强======================================"); } 可以让配置变得更方便 总结 @Aspect:定义切面类的注解 通知类型: @Before:前置通知 @AfterReturing:后置通知 @Around:环绕通知 @After:最终通知 @AfterThrowing:异常抛出通知 @Pointcut:定义切入点的注解

/template/Home/Zkeys/PC/Static