spring复习(二)AOP
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的更多相关文章
- spring学习(二) ———— AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- 学习 Spring (十二) AOP 基本概念及特点
Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...
- Spring 学习二-----AOP的原理与简单实践
一.Spring AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...
- 框架应用:Spring framework (二) - AOP技术
基础概念 线程中的方法栈 java程序虚拟机启动时会载入程序码,虚拟机会为每一条正在运行的线程生成一个方法调用栈,线程以方法运行为执行单位. AOP概念以及目标 AOP是面向切面编程,其实就是在不修改 ...
- Spring 初探(二) AOP 图集
Spring AOP属于第二代AOP.采用Java作为AOP的实现语言(AOL),采用动态代理机制和字节码生成技术实现. 代理设计模式 ISubject 对被访问者或者被访问资源的抽象,某些场景下不使 ...
- spring(二) AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- spring注解、aop(二)
使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...
- 复习Spring第二课--AOP原理及其实现方式
AOP原理: AOP,面向方面的编程,使用AOP,你可以将处理方面(Aspect)的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect.AOP可以防止代码混乱.AOP的应用范围包括:持久 ...
- Spring系列之AOP实现的两种方式
AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...
- Spring核心框架 - AOP的原理及源码解析
一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...
随机推荐
- 菜单导航tab切换样式的小技巧
1.最终效果 2.HTML结构 <div class="licaiMenu"> <ul class="navi"> <li> ...
- 【译】32位 .NET Framework 项目的 WinForm 设计器选择
在客户反馈的推动下,Visual Studio 2022 向64位架构过渡,标志着增强开发体验的关键一步.正如 Klaus Loffelmann 在他的博客文章中所描述的那样,这种转换增强了整体性能和 ...
- 精贴总结 - 万字长文带你入门Istio
原文 - 万字长文带你入门Istio 一.个人看法 背景:以docker+k8s普及,支持快速部署,通过k8s允许统一管理 解决:1)设计分布式系统,导致开发难度提高:2)统一多语言的服务治理方案 目 ...
- MySql学习之初识SQLyog
•SQLyog安装与配置 [安装包,提取码:w6sj] [安装教程,提取码:cwqu] •MySQL的语法规范 不区分大小写,但建议关键字大写,表名.列名小写 每条命令最好用分号结尾 每条命令根据需要 ...
- 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案
安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...
- 在salesforce中如何获取Security Token
Trailhead练习Soap API使用Soap UI时,需要Security Token才能登录,在Lightning一直找不到,后来切换到Classic才找到.现在提供一个简单粗暴的方式,快速定 ...
- FTP的配置和管理
实验环境: 两台windows servers 一台已经配置了FTP服务器,IP为192.168.1.220,vmnet1 一台作为客户端测试,IP为192.168.1.138,vmnet1 一:FT ...
- 探讨三维模型OBJ格式轻量化在数据存储的重要性
探讨三维模型OBJ格式轻量化在数据存储的重要性 三维模型的OBJ格式轻量化在数据存储方面具有重要性.以下是对三维模型OBJ格式轻量化在数据存储的重要性进行浅析: 1.节省存储空间:原始的三维模型文件往 ...
- Python实现简易版TCP代理
什么是TCP代理 TCP代理是一种网络代理技术,它允许客户端和服务器之间通过一个位于中间的第三方TCP代理服务器进行通信.TCP代理的工作方式是客户端向代理服务器发送TCP连接请求,代理服务器将此请求 ...
- 【Leetcode】120. 三角形最小路径和
题目(链接) 给定一个三角形triangle ,找出自顶向下的最小路径和. 每一步只能移动到下一行中相邻的结点上.相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点 ...