博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AOP面向切面编程
阅读量:5955 次
发布时间:2019-06-19

本文共 2816 字,大约阅读时间需要 9 分钟。

1.AOP

Aop(aspect object programming)面向切面编程

  功能: 让关注点代码与业务代码分离!

关注点

  重复代码就叫做关注点;

切面

  关注点形成的类,就叫切面(类)!

  面向切面编程,就是指对很多功能都有的重复的代码抽取,再在运行的时候往业务方法上动态植入“切面类代码”。

切入点

  执行目标对象方法,动态植入切面代码。

  可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。

  Aop实现的原理就是代理。

2.Spring中的aop编程

1) 先引入aop相关jar文件 (aspectj aop优秀组件)

spring-aop-3.2.5.RELEASE.jar 【spring3.2源码】

aopalliance.jar 【spring2.5源码/lib/aopalliance】

aspectjweaver.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】

aspectjrt.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2\lib】

注意: 用到spring2.5版本的jar文件,如果用jdk1.7可能会有问题。

需要升级aspectj组件,即使用aspectj-1.8.2版本中提供jar文件提供。

2)bean.xml中引入aop名称空间

2.1注解方式实现aop编程

开启aop注解

使用注解

@Aspect 指定一个类为切面类

@Pointcut("execution(* cn.itcast.e_aop_anno.*.*(..))") 指定切入点表达式

@Before("pointCut_()") 前置通知: 目标方法之前执行

@After("pointCut_()") 后置通知:目标方法之后执行(始终执行)

@AfterReturning("pointCut_()") 返回后通知: 执行方法结束前执行(异常不执行)

@AfterThrowing("pointCut_()") 异常通知: 出现异常时候执行

@Around("pointCut_()") 环绕通知: 环绕目标方法执行

@Aspect //指定为切面类

public class Aop {//指定切入点表达式,拦截哪些方法,即为哪些类生成代理对象@Pointcut("execution(* com.juaner.spring.aop.*.*(..))")public void testPt_(){}@Before("testPt_()")public void begin(){System.out.println("事务开始!");}@After("testPt_()")public void commite(){System.out.println("事务提交!");}@AfterReturning("testPt_()")//出现异常不执行public void afterReturning(){System.out.println("调用目标方法结束!");}@AfterThrowing("testPt_()")//出现异常才执行public void afterThrowing(){System.out.println("目标方法出现异常!");}@Around("testPt_()")public void around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("环绕前");Object proceed = pjp.proceed();//执行目标方法System.out.println("环绕后");}}

使用切面类

IUserDao userDao = (IUserDao) ac.getBean("userDao");userDao.save();

如果userDao实现了接口,则userDao为动态代理对象

否则userDao为cglib代理对象

2.2使用xml方式实现aop编程

配置切入点

  

3.切入点表达式

切入点表达式语法定义如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)          throws-pattern?)

 

转载于:https://www.cnblogs.com/juaner767/p/5595752.html

你可能感兴趣的文章
12T已达机械硬盘极限 未来突破靠氦气硬盘
查看>>
云时代的大数据存储-云HBase
查看>>
全球互联网大面积瘫痪不再是虚幻
查看>>
Intel彻底封杀Skylake非黑盒版超频
查看>>
大数据和人工智能将成消费金融主要驱动力
查看>>
大数据先行 传统金融转型需从体制上创新
查看>>
贵州出台首部大数据地方法规 数据开放引入负面清单
查看>>
全球以太网交换机和路由器市场:谁领跑?
查看>>
17家新创 组物联网国家队
查看>>
工信部:2020年启动5G商用
查看>>
2016年CIO的五个优先级
查看>>
移动办公之路的行业探索
查看>>
Berg Insight:移动M2M连接将实现长足发展
查看>>
2017年云计算行业新动向盘点
查看>>
雅虎因发送垃圾短信面临50万人集体诉讼
查看>>
可视化分析:洞见数据的秘诀
查看>>
《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.15 如何掌握拍摄方向
查看>>
hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)...
查看>>
Apache Tomcat 信息泄露漏洞(CVE-2016-8747)
查看>>
《HBase企业应用开发实战》—— 3.6 本章小结
查看>>