面向切面对象AOP
前言
面向切面编程(思想)AOP Aspect Oriented Programming,是面向对象基础上 更关注最终目标 而不关注中间的小目标,简而言之,就是我们的目标(例如constroller)触发了我们关注的方法,此时就执行我们的观察者行为,例如在目标的方法触发前做事,触发后做事等等。
为了让大家更好的理解,这里把面向过程、面向对象先讲解一遍。
面向过程编程(思想)POP
Procedure Oriented Programming,面向过程编程思想(关注事情步骤,事情本身),将一件事情的整体看作是一个流程,我们更关注事情的流程、步骤。比如我去超市买菜,我要下楼,等红绿灯,走过几条街道,进入超市选择自己要的菜,然后排队买单。我会关注这些过程要经历的事件,步骤。
面向对象编程(思想)OOP
Object Oriented Programming,面向对象编程思想(关注中间有几个对象参与其中),将原有整体事情的步骤,拆分成小段,每一个小段封装成一个单独的事情(方法),不同的方法交给不同的人来做,例如我去超市买菜,我在家里出发,最终目的是在超市买菜,中间几个环节交给不同的人(对象)来帮我做:下楼(被人背下去),打车,选菜,排队等等都有人帮我做,我只要把这些顺序连起来,指挥不同的对象按照我要求的顺序执行便可。
面向切面编程(思想)AOP
Aspect Oriented Programming,面向切面编程思想(面向对象基础上 更关注最终目标 而不关注中间的小目标),但要注意切面本身也是对象,比如我去超市买菜,我为起始对象,超市为目标对象,在我到超市之前所经历的事情都归纳到切面对象(下楼,打车,选菜,排队执行这些方法的人(对象)等等),连接点(管理切面对象中的方法按顺序执行),代理对象负责管理这些切面对象,切点为买菜(即在目标对象中触发我们关心的方法);
案例
这里就用js模拟了,js模拟简单些,java模拟的话思路也是一样的,而且java的spring本身用xml或注解就可以了,这里主要讲思想
// 面向切面的方式
class agency{//可以理解为过滤器 before(){
console.log("走路去超市");
} main(Func){//代理对象
this.before();
Func();
this.after();
} after(){
console.log("走路回家");
} } let agencyObj = new agency();//找代理,类似找人帮我们买菜送上门,这方式好处在于其他人还可以找代理买家具,买学习用品等等,我们生成了一次代理,然后传不同的任务进去让代理帮我们执行
function main(){
money -= 55;
console.log("买完菜,减去55元,还剩:"+money);
}
agencyObj.main(main);//结果同上 money = 100;
function main2(){
money -= 98;
console.log("买日用品,减去98元,还剩:"+money);
}
agencyObj.main(main2);
上面的before和after方法可以当成过滤器,比如我要得到的数据渲染前先解密,解密渲染后,部分数据用*替换这类场景。
思路
面向切面的方式就是更注重结果而不注重中间实现的步骤,中间无论由多少个切面对象帮你做了事,都由一个代理对象来帮你管理执行,而我们需要做的就是把要做的事告诉代理对象。当然面向切面的方式是否使用要根据业务场景来定,如果发现有多个方法中间需要执行的步骤流程一致,而这些方法只需要拿到经过这些步骤之后所得到的结果,不关心中间发生了什么,就使用面向切面的方式。
面向切面对象AOP的更多相关文章
- 面向切面编程(Aop)
AOP中的概念 AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程 ...
- 理解面向过程(OPP)、面向对象(OOP)、面向切面(AOP)
概念 面向过程编程OPP:Procedure Oriented Programming,是一种以事物为中心的编程思想.主要关注“怎么做”,即完成任务的具体细节. 面向对象编程OOP:Object Or ...
- Spring学习手札(二)面向切面编程AOP
AOP理解 Aspect Oriented Program面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 但是,这种说法有些片面,因为在软件工程中,AOP的价值体现的并 ...
- Spring框架学习笔记(2)——面向切面编程AOP
介绍 概念 面向切面编程AOP与面向对象编程OOP有所不同,AOP不是对OOP的替换,而是对OOP的一种补充,AOP增强了OOP. 假设我们有几个业务代码,都调用了某个方法,按照OOP的思想,我们就会 ...
- Spring之控制反转——IoC、面向切面编程——AOP
控制反转——IoC 提出IoC的目的 为了解决对象之间的耦合度过高的问题,提出了IoC理论,用来实现对象之间的解耦. 什么是IoC IoC是Inversion of Control的缩写,译为控制 ...
- 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
- [译]如何在ASP.NET Core中实现面向切面编程(AOP)
原文地址:ASPECT ORIENTED PROGRAMMING USING PROXIES IN ASP.NET CORE 原文作者:ZANID HAYTAM 译文地址:如何在ASP.NET Cor ...
- Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...
- 设计模式之面向切面编程AOP
动态的将代码切入到指定的方法.指定位置上的编程思想就是面向切面的编程. 代码只有两种,一种是逻辑代码.另一种是非逻辑代码.逻辑代码就是实现功能的核心代码,非逻辑代码就是处理琐碎事务的代码,比如说获取连 ...
随机推荐
- Java实现 蓝桥杯VIP 算法训练 ALGO-16进制转换
算法训练 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的 ...
- Java实现 蓝桥杯VIP 算法训练 采油区域
算法训练 采油区域 时间限制:2.0s 内存限制:512.0MB 提交此题 查看参考代码 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整 ...
- CUDA优化
cuda程序优化 一:程序优化概述 1:精度 在关键步骤使用双精度,其他步骤使用单精度,以获得指令吞吐量和精度的平衡. 2:延迟 先缓冲一定量数据,在交给GPU计算.可以获得较高的数据吞吐量. 3:计 ...
- qt-embedded-4.5.3移植到FL2440开发板
1. 2.configure配置 ./configure -opensource -confirm-license -release -shared -fast -no-qt3support -no- ...
- 如何通过PR给视频添加字幕?
第一步:将视频通过导出音频格式MP3 第二步:将音频MP3导入网易见外平台 第三步:在网易见外平台创建项目,进行语音转写如下所示: 第四步:将从网易见外平台到处的srt字母文件,打开后进行编码为utf ...
- laravel里的队列学习
首先,我们要搞明白几个概念,从小到大依次有:队列任务,队列,连接. 他们属于依次被包含的关系,一个队列里有许多的队列任务,一个连接中可以有许多队列. 队列任务:对每个用户都会进行的操作,理解为队列任务 ...
- Communication【floyd判环+并查集】
Communication 题目链接(点击) 题目描述 The Ministry of Communication has an extremely wonderful message system, ...
- python+selenium识别图片验证码
import timeimport pytesseractfrom PIL import Image, ImageEnhancefrom selenium import webdriver url = ...
- Oracle VM VirtualBox 连接 Centos7 minimal版
概述: 本博客是系列博客,主要讲述在Windows环境下安装虚拟机,在虚拟机中安装lunix系统,在lunix下安装docker,在docker中安装并使用常用的开发软件,比如tomcat.redis ...
- Map 转 json格式 保留null值的解决办法
Map 转 json格式 保留null值的解决办法 开发中遇到将map数据转json格式,然后map中含null值的键值对都被转没了,所以记录一下,以下是解决方法 使用fastJson进行转换 imp ...