1.aop基于xml以及注解的AOP配置

什么是AOP

简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的
基础上,对我们的已有方法进行增强.

AOP术语:

  切面 --横向插入的系统功能如日志 事务等.

连接点 --指的是方法的调用 是对一个对象的操作如方法调用或异常抛出.

切入点 --需要处理的连接点

通知(增强处理) --在定义好的切入点处所要执行的程序代码,可以理解为切面类中的方法,是切面的具体实现.

  代理 --将通知应用到目标对象之后,被动态创建对象.

  织入 --将切面代码插入到目标对象上,生成代理对象的过程.

动态代理

AOP中的代理就是就是由AOP框架动态生成一个对象,该对象可以作为目标对象使用.

实现动态代理两种方式:

1.JDK动态代继承接口InvocationHandler实现invoke()方法.

2.是CGLIB动态代理.

基于代理类的AOP实现

使用 ProxyFactoryBean创建AOP代理是最基本的方式,配置文件中可以指定选用jdk或者CJLIB动态代理

spring的通知类型(可以在执行方法前后进行增强处理)

1.前置通知---方法执行之前增强 一般用于权限控制

2.环绕通知---方法执行前后增强通知 可以用于日志和事务

3.后置通知 ---方法执行后增强 可用于关闭流,上传文件,删除临时文件

4.异常通知---方法抛出异常进行增强 用于处理异常记录日志

AspectJ 建议使用

--基于xml

aop:aspect:
作用: 用于配置切面。
属性:
id:给切面提供一个唯一标识。
ref:引用配置好的通知类 bean 的 id。 <aop:aspect id="txAdvice" ref="txManager">
<!--配置通知的类型要写在此处-->
</aop:aspect> aop:before
作用: 用于配置前置通知。
指定增强的方法在切入点方法之前执行
属性:
method:用于指定通知类中的增强方法名称
ponitcut-ref:用于指定切入点的表达式的引用
poinitcut:用于指定切入点表达式
执行时间点: 切入点方法执行之前执行 <aop:before method="beginTransaction" pointcut-ref="pt1"/> 切入点:
<!--( * com.service.impl.*.*(..)) 第一个*代表返回类型,表示所有返回类型,第二个*表示类名,第三个*表示所有方法 ..表示方法中的任意参数-->

--基于注解

<!--配置spring开启注解AOP的支持-->
<aop:aspectj-autoproxy/>
@Pointcut("execution(* com.service.impl.*.*(..))")

--spring通知类型

<!--配置AOP-->
<aop:config>
<!--配置切面-->
<!--配置切入点表达式 下面的配置可以引用它-->
<aop:pointcut id="pt" expression="execution( * com.service.impl.*.*(..))"/>
<aop:aspect id="logAdvice" ref="logger">
<!--前置通知-->
<!--( * com.service.impl.*.*(..)) 第一个*代表返回类型,表示所有返回类型,第二个*表示类名,第三个*表示所有方法 ..表示方法中的任意参数-->
<aop:before method="beforePrintLog" pointcut="execution( * com.service.impl.*.*(..))"/><!--1.第一种配置方法-->
<!--后置通知-->
<aop:after-returning method="afterPrintLog" pointcut-ref="pt"/><!--2.第二种配置方法引用切入点表达式-->
<!--异常通知-->
<aop:after-throwing method="throwPrintLog" pointcut-ref="pt"/>
<!--最终通知-->
<aop:after method="FinalPrintLog" pointcut-ref="pt"/> <!--环绕通知 (当配置了环绕通知后,前置通知不再执行了)-->
<!-- <aop:around method="xxx" pointcut-ref="pt"></aop:around>-->
</aop:aspect>
</aop:config>

2.jdbcTemlate及Spring事务控制

jdbcTemlate

它是 spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多 的操作模板类。

--使用

//1.获取 Spring 容器 ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据 id 获取 bean 对象 JdbcTemplate jt = (JdbcTemplate) ac.getBean("jdbcTemplate");
//3.执行操作 jt.execute("insert into account(name,money)values('eee',500)");

Spring事务控制

spring 的事务控制都是基于 AOP 的,它既可以使用编程的方式实现,也可以使用配置(声名式)的方式实现。

重点是使用配置的方式实现

1.编程式事务管理

...

2.声名式事务管理

1.基于xml

基于xml
<!--2.配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--5.配置事务的属性-->
<tx:attributes>
<!-- <tx:method xxx="xxx" ,xxx="xxx" ....配置事务的属性
isolation:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。
propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。
read-only:用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写。
timeout:用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。
rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。
no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。没有默认值。表示任何异常都回滚。
-->
<tx:method name="transfer" propagation="REQUIRED" read-only="false"/>
</tx:attributes>
</tx:advice>

2.注解

注解:<!--2.开启spring对注解事务的支持-->
<tx:annotation-driven transaction-manager="transactionManager"/> @Transactional //在需要的类或方法开启事务 增删改数据发生错误 就会回滚数据防止错误

spring复习(二)AOP的更多相关文章

  1. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  2. 学习 Spring (十二) AOP 基本概念及特点

    Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...

  3. Spring 学习二-----AOP的原理与简单实践

    一.Spring  AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...

  4. 框架应用:Spring framework (二) - AOP技术

    基础概念 线程中的方法栈 java程序虚拟机启动时会载入程序码,虚拟机会为每一条正在运行的线程生成一个方法调用栈,线程以方法运行为执行单位. AOP概念以及目标 AOP是面向切面编程,其实就是在不修改 ...

  5. Spring 初探(二) AOP 图集

    Spring AOP属于第二代AOP.采用Java作为AOP的实现语言(AOL),采用动态代理机制和字节码生成技术实现. 代理设计模式 ISubject 对被访问者或者被访问资源的抽象,某些场景下不使 ...

  6. spring(二) AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  7. spring注解、aop(二)

    使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...

  8. 复习Spring第二课--AOP原理及其实现方式

    AOP原理: AOP,面向方面的编程,使用AOP,你可以将处理方面(Aspect)的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect.AOP可以防止代码混乱.AOP的应用范围包括:持久 ...

  9. Spring系列之AOP实现的两种方式

    AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...

  10. Spring核心框架 - AOP的原理及源码解析

    一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...

随机推荐

  1. Html飞机大战(十二): canvas写字(结束状态的编辑)

    好家伙,基本的功能都做完了,来补充一个结束状态的游戏结束文案   上代码: case END: //给我的画笔设置一个字的样式 //后面写出来的字都是这个样式的 context.font = &quo ...

  2. 机器学习策略篇:详解满足和优化指标(Satisficing and optimizing metrics)

    满足和优化指标 要把顾及到的所有事情组合成单实数评估指标有时并不容易,在那些情况里,发现有时候设立满足和优化指标是很重要的,让我告诉是什么意思吧. 假设已经决定很看重猫分类器的分类准确度,这可以是\( ...

  3. The OCaml Language Cheatsheets

    The OCaml Language Cheatsheets OCaml v.4.08.1 Syntax Implementations are in .ml files, interfaces ar ...

  4. 【Azure 环境】 介绍两种常规的方法来监视Window系统的CPU高时的进程信息: Performance Monitor 和 Powershell Get-Counter

    问题描述 部署在Azure上的VM资源,偶尔CPU飙高,但是发现的时候已经恢复,无法判断当时High CPU原因. 在Windows系统中,有什么方式能记录CPU被进程占用情况,查找出当时是排名前列的 ...

  5. 【Azure Developer】解答《美丽的数学》一书中P120页的一道谜题:寻找第四个阶乘和数

    一道谜题 在观看<美丽的数学>一书中,在120页中有一道谜题: 数字145被称为一个阶乘和数, 因为它具有以下有趣的属性,如果我们将它的各位数字的阶乘相加,会得到该数字本身 1! +4! ...

  6. EFCore之命令行工具

    介绍 EFCore工具可帮助完成设计数据库时候的开发任务,主要用于通过对数据库架构进行反向工程来管理迁移和搭建DbContext和实体类型.EFCore .NET命令行工具是对跨平台.NET Core ...

  7. 用CFF Explorer隐藏文件格式

    1.首先我们加载两个PNG文件,可以看到 文件格式头部是一样的,我们如何将一个PDF文件格式改成PNG,修改之后的文件虽然含有图片的文件头格式,但是并不能打开. 将PNG的文件头复制写入到PDF文件头 ...

  8. MK5 机械键盘 说明书

    FN + 右箭头 就是加快节奏 FN + ScrLk 就是切换模式

  9. 基于ads1299生物电信号采集研发总结之参考信号的接法

    一 概念 ads1299的电极端有两种采集方式,单端和差分.两种的使用方式又有很大的区别,怎么高质量的采集信号,这个是一个比较难的问题. 二 解析 参考信号SRB1的接法,决定了采集到数据的精确度和信 ...

  10. vue入门教程之-插槽

    vue入门教程之-插槽 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 https://www ...