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杂谈的更多相关文章

  1. Spring AOP 杂谈

    其实AOP的思想现在讲的已经很多了,本身没有什么难点,难的是AOP有自己的一套术语,而我们经常被这套术语搞晕.术语没招,只能理解背诵了,尽管背诵很讨厌,可大家都这么说,不知道,就会被说晕. AOP思想 ...

  2. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些“扯淡”,LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还是很少在面试中犯如此 ...

  3. Spring中AOP相关的API及源码解析

    Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...

  4. 你知道Spring是怎么将AOP应用到Bean的生命周期中的吗?

    聊一聊Spring是怎么将AOP应用到Bean的生命周期中的? 本系列文章: 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译 读源码,我们可以从第一行读起 你知道Spr ...

  5. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  6. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  7. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  8. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  9. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

随机推荐

  1. spring事务源码解析

    前言 在spring jdbcTemplate 事务,各种诡异,包你醍醐灌顶!最后遗留了一个问题:spring是怎么样保证事务一致性的? 当然,spring事务内容挺多的,如果都要讲的话要花很长时间, ...

  2. Android学习总结(十二)———— BaseAdapter优化

    一.BaseAdapter的基本概念 对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到L ...

  3. 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字

    2272: [Usaco2011 Feb]Cowlphabet 奶牛文字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 97 ...

  4. synchronized的4种用法

    1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,当前线程 ...

  5. Eclipse 项目导入 Studio Debug运行卡死在进入界面

    最近,把一个以前开发的Eclipse的项目导入Studio中,遇到了各种奇葩的问题,这时候就要参考百度了,基本都能解决,我导入的项目遇到的问题在百度中都能找到答案,那么我这里就不在做总结了 第二天,发 ...

  6. Spring还使用基于 JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释

    @PostConstruct 和 @PreDestroy 注释: 你可以使用 @PostConstruct 注释作为初始化回调函数的一个替代,@PreDestroy 注释作为销毁回调函数的一个替代,其 ...

  7. 如何使用Vue2做服务端渲染

    花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500-700ms之间,SS ...

  8. App对接支付宝移动支付功能

    前段时间看了下app对接支付宝移动支付的功能,并自己总结了下支付宝移动支付的实现流程 一.申请流程          前提是已有现成的应用. 1.  申请地址            https://b ...

  9. Android开发之NavigationView的使用

    NavigationView主要是和DrawerLayout框架结合使用,来完成抽屉导航实现侧边栏 引用一段官方文档的示例代码 <android.support.v4.widget.Drawer ...

  10. EF批量插入(转)

    原作者地址http://blog.csdn.net/zlts000/article/details/46385773 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramew ...