Spring(十二)--Spring AspectJ
2018-09-18 06:37:07来源:博客园 阅读 ()
Spring AspectJ
AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
AspectJ 是一个面向切面的框架!定义了AOP的语法!
Spring 将AspectJ 整合到了自己的框架中!
需要引入两个核心jar
01.aspectj.weaver
02.spring-aspects
(如果你使用的是idea 所需的所有pom节点,在这儿:https://www.cnblogs.com/fl72/p/9625697.html)
务必掌握的 AspectJ 的切入点表达式
execution([访问权限类型] 返回值类型 [完整限定类名]方法名 (参数) [抛出的异常类型])
execution( 返回值类型 方法名(参数))
*:0-N的字符
..:
01.如果是在方法参数中,表示参数可有多个或者可无
02.如果是在包名之后,表示当前包和子包
+:
01.如果定义在类后面,表示当前类以及子类
02.如果定义在接口后面,表示当前接口以及实现类
例子:
1. 使用注解实现
/** * 当前类就是 整个程序中需要的各种系统级业务 * 就是一个切面类 */ @Aspect public class MyAspectJ { @Before("execution(* *..UserDao.sleep(..))") public void before(){ System.out.println("前置增强........"); } @AfterReturning("execution(* *..UserDao.sleep(..))") public void afterReturning(){ System.out.println("后置增强........"); } //如果想获取方法的返回值 @AfterReturning(value = "execution(* *..UserDao.sleep(..))",returning = "result") public void afterReturning(String result){ System.out.println("后置增强........"+result); } /** * 环绕增强可以改变返回值 */ @Around("execution(* *..UserDao.eat(..))") public Object around(ProceedingJoinPoint point){ System.out.println("环绕增强进来........"); Object result=null; try { result= point.proceed(); //执行目标方法 } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println("环绕增强出去........"); return "orange"; } }
2. 对应的xml文件和测试方法
<!--01.配置目标对象--> <bean id="userDao" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置切面--> <bean id="myAspectJ" class="com.xdf.annotation.MyAspectJ"/> <!--03.注册aspectj的自动代理--> <aop:aspectj-autoproxy/> //测试方法 @Test public void defaultTest(){ ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); UserDao dao= context.getBean("userDao", UserDao.class); // System.out.println(dao.eat()); dao.sleep(); }
3. 使用纯切面的方式实现
public class MyAspectJ { public void before(){ System.out.println("前置增强........"); } public void afterReturning(){ System.out.println("后置增强........"); } /** * 环绕增强可以改变返回值 */ public Object around(ProceedingJoinPoint point){ System.out.println("环绕增强进来........"); Object result=null; try { result= point.proceed(); //执行目标方法 } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println("环绕增强出去........"); return "orange"; } }
4.对应的xml文件和测试方法
<!--01.配置目标对象--> <bean id="userDao" class="com.xdf.dao.UserDaoImpl"/> <!--02.配置切面--> <bean id="myAspectJ" class="com.xdf.annotation.MyAspectJ"/> <!--03.注册aspectj需要的切入点--> <aop:config> <!--配置切入点表达式--> <aop:pointcut id="myPonit" expression="execution(* *..UserDao.sleep(..))"/> <aop:pointcut id="myPonit2" expression="execution(* *..UserDao.eat(..))"/> <!--配置切面--> <aop:aspect ref="myAspectJ"> <aop:before method="before" pointcut-ref="myPonit"/> <aop:after-returning method="afterReturning" pointcut-ref="myPonit"/> <aop:around method="around" pointcut-ref="myPonit2"/> </aop:aspect> </aop:config>
@Test public void aspectJTest(){ ApplicationContext context=new ClassPathXmlApplicationContext("aspectJ.xml"); UserDao dao= context.getBean("userDao", UserDao.class); //System.out.println(dao.eat()); dao.sleep(); }
未完待续!!!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash