AOP杂谈
1.什么是AOP?
Spring 2大特性: IOC (Inverse of Control)和 AOP(Aspect Oriented Programming)
PS:
AOP:面向切面编程 设计思想
OOP:面向对象编程 编程思想
SOA:面向服务架构 架构思想
AOP 概括:采用代理,在不改变原有代码的基础上,进行了代码的增强,替代了传统的纵向继承带来的麻烦
面向切面的编程:切面 Aspect --- 通知(增强代码逻辑)和切入点(对目标哪些方法进行拦截) 编程
2.AOP底层实现:代理
a.Jdk 动态代理
例子:
(1)创建一个接口
(2)实现接口类
(3)创建jdk动态代理工厂类
(4)测试
JDK代理 是面向接口生成代理对象的,目标对象没有实现接口,是无法使用JDK动态代理,这是JDK代理的一个缺点
b.Cglib 动态代理
测试例子:
(1)新建类
(2)创建动态代理
(3)测试
PS:SpringAOP 优先对接口创建代理,使用接口代理使用JDK代理,若无接口,则使用cglib动态代理
Cglib创建动态代理对象性能比JDK高,但创建代理对象时间长很多,由于cglib采用动态创建子类的方式,对于final方法 ,无法创建代理
3.Spring切面编程
a.传统的aop编程(具体了解AspectJ,此不做多谈)
b.Spring2.0后,为了简化AOP变成,开始使用AspectJ框架
AspectJ共提供6种通知类型
(1)前置通知 Before
(2)后置通知 AfterReturning
(3)环绕通知 Around
(4)抛出通知 AfterThorwing
(5)最终通知 After
(6)引介通知 DeclareParents 在目标类基础上添加属性和方法
举例AOP切面编程:
(1)编写切面类,注册到spring 容器中
(2)配置切入点和切面
切面表达式 bean(*Service) 代表:任何一个在名字匹配通配符表达式'*Service'的Spring bean之上的连接点
上述为前置通知,后置通知类似
环绕通知:
参数ProceedingJoinPoint参数用于控制目标方法执行
也可使用注解进行springAOP
开启注解自动切面代理
PS:@PointCut注解使用
每个通知内定义切点表达式,工作量大,不易维护,重复的切点可以使用该注解
切点方法定义规则: 私有无返回值无参数方法 ,添加@Pointcut注解,方法名就是切点名称
可以直接使用,切点表达式还支持逻辑运算符
例如:
@Before(“mypointcut1()&&mypointcut2()”) ---- 通知满足两个切点表达式
4. AOP应用:事务管理
Spring事务声明两种方式:
1.编程式的事务管理,存在代码侵入
2.声明式的事务管理,底层使用的则是AOP的环绕通知
Tarot项目的spring-context.xml 配置
1.配置了transactionManager 事务管理器
2.配置advice,spring已提供事务管理advice TransactionIntercepter
可以使用tx 名称空间简化配置
配置属性:
Name: 方法名
Isolation: 隔离级别 默认DEFAULT
Propagation: 传播行为 默认Required
Timeout: 超时时间 默认-1
Read-only: 是否只读, 默认 false
Rollback-for: 发生何异常 回滚
NoRollback-for: 发生此异常忽略,继续提交
3.配置切入点和切面
Pointcut 配置 表达式
this() 表达的是用于匹配当前目标对象类型的执行方法,包括引入接口也类型匹配
新建的service都继承了该接口,service层事务生效
PS: 注解配置
注解驱动事务管理
之后再service注解
总结:相比于注解,使用xml适合统一管理
AOP杂谈的更多相关文章
- Spring AOP 杂谈
其实AOP的思想现在讲的已经很多了,本身没有什么难点,难的是AOP有自己的一套术语,而我们经常被这套术语搞晕.术语没招,只能理解背诵了,尽管背诵很讨厌,可大家都这么说,不知道,就会被说晕. AOP思想 ...
- 杂谈---小故事小道理,面试中的小技巧(NO.2)
本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...
- Spring中AOP相关的API及源码解析
Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...
- 你知道Spring是怎么将AOP应用到Bean的生命周期中的吗?
聊一聊Spring是怎么将AOP应用到Bean的生命周期中的? 本系列文章: 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译 读源码,我们可以从第一行读起 你知道Spr ...
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
随机推荐
- 每天一个Linux命令(12)--more命令
more命令,功能类似cat, cat 命令是这个文件的内容从上到下显示在屏幕上,more会以一页一页的显示方便使用者主页阅读,而最基本的指令就是按空格键就往下一页显示,按B键就会往回一页显示,而且 ...
- RHL 6.0学习日记, 先记下来,以后整理。
今天又遇到哪些问题呢? 1.配置网络的问题,我把网络配置文件胡乱改了,然后就上不了网了 因为一直都没怎么用到网络,网线都不怎么连接的,今天只是突然想ping一下,于是就Ping 了一下,一开始ping ...
- Material Design学习-----FloatingActionButton
FloatingActionButton是悬浮操作按钮,它继承自imageview,所以说它具备有imageview所有的方法和属性.与其他按钮不同的是,FloatingActionButton默认就 ...
- Handlebars模板引擎之进阶
取得索引 我想取得索引作为序号这个是常用的.在handlebars也是存在的. 就是使用 @index 来获取索引 {{#each this}} <tr> <td>{{ @in ...
- php实现留言板功能
这个小小的留言板功能适合班级内或者公司内部之间的讨论,对话和留言,非常的方便,更重要的是无需网络,对于公司管理层来说是非常乐于常见的, 下面是这个留言板的写法: 1 首先是登录页面: <form ...
- 极光推送助推视频App,打造最活跃手机新媒体平台
移动应用能够帮助吸引更多的新用户,增加用户互动和对话.但你得让用户想起你,如何在一部手机上数十个App中脱颖而出,是考验App运营的关键之处.为了打造一个成功的App,开发者需要着眼长远,不应局限于其 ...
- [干货来袭]C#7.0新特性(VS2017可用)
前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7 ...
- 【js】函数问题
一.函数重载问题: 由于js的函数传入的参数当做arguments对象(和数组类似,但不是Array的实例),传入的参数类型和数量没有限制,没有函数签名,所以如果要实现重载功能 的话,只能是不够完美得 ...
- Hibernate学习笔记①
---恢复内容开始--- 1.JavaEE的三层结构 WEB层--Service层--DAO层 2.Hibernate版本 Hibernate3.x 4.x 5.x 4版本是过渡版本 不使用 5 ...
- 1596: [Usaco2008 Jan]电话网络
1596: [Usaco2008 Jan]电话网络 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 601 Solved: 265[Submit][S ...