Spring004--Spring AOP(mooc)
一。Spring AOP概览
1.1。AOP(面向切面编程)是什么
1。 AOP是一种编程范式,而不是编程语言。
2。解决特写问题,不能解决所有问题
3。是OOP的补充,不是替代
除了面向切面编程,还有如下编程范式:
1。面向过程编程:如c/python
2。面向对象编程:如java/c++
3。函数式编程
4。事件驱动编程(GUI开发中比较常见)
5。面向切面编程
1.2。AOP(面向切面编程)解决的问题
1。DRY:Don't Repeat yourself 避免代码重复问题
2。SoC:Separation of Concerns 关注点分离
(1)。水平分离:展示层-》服务层-》持久层
(2)。垂直分离:模块划分(订单/库存等业务角度)
(3)。切面分离:分离功能性需求与非功能性需求(把非功能性需求从功能性需求中剥离开来集中管理)
1.3。AOP(面向切面编程)好处
AOP好处即为“集中管理”:
1。集中处理某一关注点/横切逻辑;
2。可以方便的添加/删除关注点;
3。侵入性少,增强代码可读性及可维护性;
1.4。AOP(面向切面编程)应用声景
1。权限控制
2。缓存控制
3。事务控制(数据库事务控制)
4。审计日志(操作记录)
5。性能监控
6。分布式追踪
7。异常处理
以上为偏非功能性需求,特别适合AOP应用声景。
1.5。支持AOP(面向切面编程)的编程语言
java / .net / c / c++ / ruby/ python /php ...
二。案例实战:利用AOP改善既有代码
案例背景:
1。产品管理的服务
2。产品添加/删除操作只能管理员才能进行操作
3。普通实现 VS AOP实现
(1)。普通实现:在原有业务代码中添加是否为管理员验证,而且每增加一个方法就需要验证一次。麻烦。
(2)。AOP:将验证逻辑从业务代码中独立出来,应用配置文件或注解方式实现。
Step1:添加公共切面验证
上述:
@Pointcut():表示在标注注解AdminOnly上,添加切面。
@Before():表示在之前进行拦截。
Step2:在需要拦截的方法上增加注解,AOP即可以对其进行拦截。
三。Spring AOP使用详解
3.1。使用方式
3.2。Spring AOP主要注解
1。@Aspect注解:主要标注一个java类是Aspect切面配置的一个类。
2。@Pointcut注解:标注要在哪些类哪些方法上植入相应的代码。
3。@Advice注解:什么时机去植入,如在执行之前/之后
3.3。Spring AOP切面表达式介绍
1。wildcards(通配符)
* :匹配任意数量的字符
+ :匹配指定类及其子类
.. :一般用于匹配任意数的子包或参数
2。operators(运算符)
&& :与操作符
|| :或操作符
! :非操作符
3。designators(指示器:想通过什么方式来匹配你想要的方法)
(1)。within表达式(匹配包/类型)
(2)。匹配对象
说明:
@Pointcut里面的this:一般情况和target一样(有待补充)
target(接口):代表是这个接口的实现类 进行aop
bean(类):匹配这个类里面的所有方法
(3)。匹配参数
(4)。匹配注解
(5)。execution表达式
?:表示是可以省略的。 没有?则表示是必须的。
参数1:修饰符pattern(可选)
参数2:返回值pattern(必须)
参数3:描述层包名pattern(可选)
参数4:描述方法名pattern/方法参数pattern(必须)
参数5:匹配方法抛出哪些异常(可选)
(6)。advice注解--5种
【1】:@Before:前置通知
【2】:@After(finally):后置通知,方法执行完之后
【3】:@AfterReturning:返回通知,成功执行之后
【4】:@AfterThrowing:异常通知,抛出异常之后
【5】:@Around:环绕通知
四。Spring AOP实现原理解析
4.1。原理概述
植入时机:
1。编译期(AspectJ)
2。类加载时(AspectJ5+)
3。运行时(Spring AOP):以spring aop为代表。
运行时是如何植入的?代理对象。从静态代理到动态代理(动态代理实现:基于接口代理与基于继承代理)
4.2。代理模式
类图:
1。静态代理
2。动态代理(基于接口代理与基于继承代理 / jdk代理与Cglib代理)
(1)。JDK代理
(2)。Cglib代理
Spring004--Spring AOP(mooc)的更多相关文章
- Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP
基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...
- Spring(十九):Spring AOP(三):切面的优先级、重复使用切入点表达式
背景: 1)指定切面优先级示例:有的时候需要对一个方法指定多个切面,而这多个切面有时又需要按照不同顺序执行,因此,切面执行优先级别指定功能就变得很实用. 2)重复使用切入点表达式:上一篇文章中,定义前 ...
- Spring AOP(一)——基础概念
前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等. 介绍 面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向 ...
- Spring AOP (一)
一.AOP 是什么? AOP 是Aspect Oriented Programaing 的简称,意思是面向切面编程,AOP的应用场合是受限的,一般只适合于那些具有横切逻辑的应用场合:如性能检测.访问控 ...
- Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
AspectJ支持5种类型的通知注解: @Before:前置通知,在方法执行之前执行: @After:后置通知,在方法执行之后执行: @AfterRunning:返回通知,在方法返回结果之后执行(因此 ...
- Spring(十七):Spring AOP(一):简介
背景: 需求: 给一个计算器计算函数执行前后添加日志. 实现: 1)直接在函数中修改代码: IArithmeticCalculator.java接口类 package com.dx.spring.be ...
- Spring AOP(转载)
此前对于AOP的使用仅限于声明式事务,除此之外在实际开发中也没有遇到过与之相关的问题.最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP 来解决.一方面是为了以更加灵活的方式来解决问题,另一方 ...
- 从动态代理到Spring AOP(上)
一.前言 虽然平时日常开发很少用到动态代理,但是动态代理在底层框架等有着非常重要的意义.比如Spring AOP使用cglib和JDK动态代理,Hibernate底层使用了javassit和cglib ...
- spring aop(四)
直接找到解析aop标签的方法: protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate deleg ...
- 从动态代理到Spring AOP(中)
一.前言 上一章节主要介绍了JDK动态代理和CGLIB动态代理:https://www.cnblogs.com/GrimMjx/p/11194283.html 这一章主要结合我们之前学习的动态代理的基 ...
随机推荐
- Centos6.6安装MySQL5.6.24
1.首先需要编译器gcc 编译器和cmake yum -y install gcc+ gcc-c++ cd /usr/local/src wget http://www.cmake.org/files ...
- 用element-ui进行文件的上传
在进项的项目中,我使用vue配合element搭建的项目,现在需要用到上传文件的写法!现在列举下我的项目中所使用的上传文件的方法! <el-upload style="display: ...
- 如何算gama(1/2)=sqrt(pi)?
关键是算e^{-x^2}在0到oo的定积分是sqrt(pi)/2. 或者利用高斯密度函数来求解
- mysql的索引以及优化
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- git上拉项目
- Chrome设置--disable-web-security解决跨域问题
这里介绍的是--disable-web-security参数.这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试. (1)新建一个chrome快捷方式,右键“属性”,“快捷 ...
- Pytorch详解NLLLoss和CrossEntropyLoss
是什么? https://www.cnblogs.com/marsggbo/p/10401215.html 具体pytorch怎么运算的 https://blog.csdn.net/qq_222102 ...
- Postman—cookie
postman中可以直接添加cookie.查看响应中的cookie: 什么是cookie HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(k ...
- spring,配置文件applictionContext.xml,Mybatis mybatis.xml,springMVC spring整合springMVC mybatis
- java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)
本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...