三大框架 之 Spring-Aop
AOP
AOP简介
- 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,
- 通过预编译方式和运行期动态代理,实现程序功能的统一维护的一种技术。
- AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
- 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
开发存在 的问题


JDK动态代理

cglib动态代理
Cglib是一个第三方开源代码
生成类库,动态添加类的属性和方法。
在spring的核心包当中已经引入了cglib

采用的是继承方式来产生的代理对象

Spring的AOP简介
- AOP思想最早是由AOP联盟组织提出的
- Spring使用这种思想最好的框架
- AspectJ
Spring的AOP有自己的实现方式,但是这种方式非常繁琐
AspectJ是一个AOP的框架
Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发
AOP相关术语
Joinpoint:连接点
可以被拦截到的方法
能够被增强的方法,这些方法就可以称为是连接点

Pointcut:切入点
- 真正被拦截的方法
- 真正被增加的方法

Advice:通知
增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知

Introduction:引介
- 类层面的增加
- 给原有的类添加一些新的属性方法
- 在开发中通常都是给方法进行增加
Target:被增加的对象

Weaving:织入
将通知应用到目标对象的过程
Proxy:代理对象
Aspect:切面
多个通知和多个切入点的集合
Spring中AOP使用
1.引入spring基本jar包
2.引入aop开发的相关jar包

3.配置文件中引入aop约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
4.Spring测试
- 测试时,每次都需要获取工厂
- 通过spring-test,就不用每次获取
- 添加测试依赖包

5.测试


6.编写一个切面类

7.将切面交给spring

8.配置AOP完成对目标产生代理

AOP通知类型
前置通知
在目标方法执行之前进行操作
后置通知
在目标方法执行之后 进行操作


环绕通知
在目标方法执行之前 和之后进行操作
public Object arount()


异常抛出通知
在程序出现异常时进行操作


最终通知
无论代码是否有异常,都会执行

AOP切入点表达式
基于execution函数完成
语法
【访问修饰符】 方法返回值 包名.类名.方法名(参数)
public com.myxq.demo2.GoodsDaoImpl.save(..)
参数为任意参数
* com.myxq.demo2.GoodsDaoImpl.save(..)
任意类型
* com.myxq.demo2.GoodsDaoImpl+.save(..)
加上当前类和子类
* com.myxq..*.*(..)
com.myxq包以及子包下面所有类的所有方法

AOP注解方式ApsectJ开发
引入Jar包

引入配置文件

编写切面类配置


使用注解的AOP对象目标类进行增强
在配置文件中开启以注解形式进行AOP开发

在切面类上添加注解

注解AOP通知类型
@Before前置通知
@AfterReturning后置通知
没有返回值

有返回值

@Around环绕通知

@AfterThrowing异常抛出通知
没有获取异常信息

获取异常信息

@After最终通知

AOP的注解切入点的配置
- 有时候一个方法要添加前置通知对又要添加异常通知,又要添加最终通知
- 可以在切面当中定义好切入点
- 在通知当中直接使用定义好的切入点表达式

定义多个切入点
一个通知同时定义到多个方法当中

当使用接口时与不使用接口内部代理区别
使用接口

不使用接口

三大框架 之 Spring-Aop的更多相关文章
- Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...
(一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...
- java框架篇---spring AOP 实现原理
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- java框架篇---spring aop两种配置方式
第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
- 利用MyEclipse配置S2SH三大框架篇-Spring配置
1.配置完Struts2后,然后配置Spring 2.单击“MyEclipse->Project Capabilities->Add Spring Capabilities” 3.选择Sp ...
- Spring AOP 框架
引言 要掌握 Spring AOP 框架,需要弄明白 AOP 的概念. AOP 概念 AOP(Aspect Oriented Programming的缩写,翻译为面向方面或面向切面编程),通过预编译方 ...
- SpringMVC详解(四)------SSM三大框架整合之登录功能实现
为了后面讲解的需要,我们取数据都会从数据库中获取,所以这里先讲讲三大框架(Spring.SpringMVC.MyBatis)的整合.前面讲解 MyBatis 时,写了一篇 MyBatis 和 Spri ...
- java的老说三大框架
一直不明白java的老说三大框架,怎么就一个SSH,今天终于有了一点点的了解. 三大框架就是Spring框架,Struts框架,Hibernate框架. Spring提供了管理业务对象的一致方法并且鼓 ...
- [转]彻底征服 Spring AOP 之 理论篇
基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...
- Java Spring AOP用法
Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...
随机推荐
- Vue项目中使用svg图标
svg的图片有着颜色自定义大小自定义的优势.在阿里图标库可以下载svg图片. 那么在vue框架中我们该怎么使用svg图片呢 这个时候就用到了 webpack 插件 svg-sprite-loader ...
- UCOSIII互斥信号量
互斥信号量可以解决优先级反转问题 优化后现象 优化方法:L和H等待同一个信号量的时候,将L任务优先级提至H相同优先级 实验举例 void start_task(void *p_arg) { OS_CR ...
- git如何删除已经提交的文件夹
在上传项目到github时,忘记忽略了某个文件夹.idea,就直接push上去了, 最后意识到了此问题,决定删除掉远程仓库中的.idea文件夹 删除前: 删除后: 在github上只能删除仓库,却无法 ...
- 【CMDB】获取服务器数据
一.通过agent的方式 原理:服务器定制执行py文件通过subprocess模块采集数据发送给数据收集的机器 数据收集的机器:192.168.11.62 服务器:192.168.11.169 数据收 ...
- (Linux基础学习)第六章:查询与修改系统的本地化(locale)与键盘布局的设置(locelectl)
第1节:可查询与修改系统的本地化(locale)与键盘布局的设置[root@centos7 ~]# localectl System Locale: LANG=en_US.UTF-8 VC Keyma ...
- ifram 调用父页面的easyui弹框
转自https://www.cnblogs.com/puke/archive/2012/09/13/2683067.html 曾经试过这样的方法 在iframe子页面获取父页面元素 ...
- Redis的缓存穿透问题和雪崩问题?
缓存穿透:就是访问redis中一个不存在的key的时候,会直接穿过缓存,去数据库中进行查询. 如果是黑客,进行恶意攻击的时候,每次都请求超过2000个/秒的时候,这个时候mysql基本上就挂了. 解决 ...
- machine learning (7)---normal equation相对于gradient descent而言求解linear regression问题的另一种方式
Normal equation: 一种用来linear regression问题的求解Θ的方法,另一种可以是gradient descent 仅适用于linear regression问题的求解,对其 ...
- ORACLE对字符串去空格处理(trim)
首先便是这Trim函数.Trim 函数具有删除任意指定字符的功能,而去除字符串首尾空格则是trim函数被使用频率最高的一种.语法Trim ( string ) ,参数string:string类型,指 ...
- CSS 相邻元素选择器
相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素.选择相邻兄弟 如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使 ...