今天学习spring的时候接触到一个新的知识以及概念AOP,老师当时讲这个知识点的时候,并没有讲太多关于这方面的知识,我们所学习到的知识侧重于应用,所以对这一块的理论知识是有一点缺少,以至于小编在学习完AOP之后,也不太清楚这是一个什么东西,到底有什么作用?因此小编自己在课余时间对这方面知识进行了一个补充学习,并且将自己的课后积累进行一个分享,希望能够帮助到和我一样迷惑到学习者!小编的每一遍文章自己都有很用心的在编写,希望自己的这份用心能够在帮助大家的同时得到大家的支持和鼓励,如果各位客官觉得小编的文章对各位到学习和理解有帮助的话,麻烦大家给我点一个赞哦(虽然小编自己也不知道这个怎么点赞!哈哈)!
首先,什么是AOP呢?
AOP(Aspect Oriented Programming):面向切面编程,一种编程范式,隶属于软件工程范畴,指导开发者如何组织程序结构,AOP弥补了OOP的不足,基于OOP基础之上进行横向开发。
OOP规定程序开发以类为主体模型,一切围绕对象进行,完成某个任务先构建模型;AOP程序开发主要关注基于OOP开发中的共性功能,一切围绕共性功能进行,完成某个任务先构建可能遇到的所有共性功能(当所有功能都开发出来也就没有共性与非共性之分)
这是AOP的概念,看到这里我相信大家肯定都明白AOP是什么了!心里暗自嘀咕:懂个寂寞!!这已经是小编整理过的介绍了,比度娘出来的东西已经少了很多内容了,但是有一说一,我自己在编写这篇文章以及上面的文字的时候,自己的脑袋里面也是模模糊糊,不明所以!但是我已经找到容易理解的方式了!!上代码!
AOP的优势:
提高代码的可重用性
业务代码编码更简洁
业务代码维护更高效
业务功能拓展更便捷
关于AOP的优势大家在看了下面的讲解之后,应该可以对这些优势进行一个进一步的理解!
这是两段学习JDBC连接Mysql数据库时进行查找和更新的代码,从这段代码中就可以看出其中重复使用的代码量还是挺多的,这对于我们程序开发者来说,就好比在做无用功,为什么同样的代码需要重复编写多次呢!这与我们技术开发者能躺着就不坐着的努力宗旨不相符合!怎么办呢?其实重复的这一部分代码可以进行抽取,简化了我们的开发 ,抽取之后是不是感觉代码量已经少了很多了呢?
但是这样的抽取,只靠其中的没有抽取的代码肯定是不可以运行程序的,运行的时候需要将其中抽取出来的共性功能代码放回去,形成一个完整的代码,从而使程序正常运行,这样的一种开发模式被称为AOP,小编这样的解释,大家可还满意?
接下来给大家分享一下关于AOP开发当中存在的几个相关理论概念希望可以帮助大家理解,下面是小编的两张图片资料,生动形象!
其中涉及到的概念有以下几个:
Joinpoint(连接点):我们平常所写的普通方法在AOP中就是连接点
Pointcut(切入点):挖掉共性功能剩余下来的方法,也就是小编上面的图片代码中所抽取之后剩余的不完整的那部分代码
Advice(通知):抽取出来的共性功能就是通知,最终回以一个方法的形式呈现
Aspect(切面):共性功能与切入点之间的存在的位置对应关系,比如:挖的这串代码在切入点代码的前面还是后面
Target(目标对象):挖掉功能的方法对应的类所产生的对象,这种对象是无法直接完成最终工作的,当然其实也是很好理解的啦!毕竟只有一部分代码。
Weaving(织入):是一个将挖掉的功能进行回填的一个动态过程。
Proxy(代理):目标对象是无法直接完成工作的,需要对其进行功能回填,通过创建的代理对象实现。
Introduction(引入/引介):就是对原始对象无中生有的添加成员变量或成员方法
接下来说说AOP的作用吧!
伴随着AOP时代的降临,可以从各个行业的标准化、规范化开始入手,一步一步将所有共性功能逐一开发完毕,最终以功能组合来完成个别业务模块乃至整体业务系统的开发。
目标:将软件开发由手工制作走向半自动化/全自动化阶段,实现“插拔式组件体系结构”搭建
今天又完成了一篇自己的学习心得,虽然自己现在连个萌新都算不上,但是自己还是希望自己能够凭借自己的微不足道的学习心得在java学习中发光发热!请大家多多支持!
Java 开发 web 项目,JSP 页面会自动创建 session,除非在页面指定 session="false"而 servlet 如果你不去调用 getSession() 或者 getSession(true) 方法,就不会自动创建 session,但是很多 web 框架它内部有可能会调用了这个方法。没有session,则就没有JSESSIONID...
1.Zynq构建SoC系统深度学习笔记系列 http://www.eefocus.com/antaur/blog/16-01/376840_33af3.html2.zedboard如何从PL端控制DDR读写 https://www.cnblogs.com/christsong/p/5672807.html3.ZYNQ入门到精通,同时博文里也有涉及sys gen和Vivado+SDK实现...
compile 'com.githang:status-bar-compat:0.3'StatusBarCompat.setStatusBarColor(this, color, lightStatusBar);
通常来说,用户在登录成功后会在首页左侧或者上方显示一个用户菜单。而这个菜单数据是根据用户的角色动态加载的,即不同身份的用户登录成功后看到的菜单是不一样的。下面通过样例演示如何实现菜单的加载与展示。一、后端部分(1)后端接口实现比较容易,先根据登录用户的 id 查询该用户具有的角色,在根据角色信息查看对应的 Menu,最后将 Menu 返回到前端。(2)这里假设后端接口为 /sysmenu,返回的数...
关于更多点云资源点击这里,包括250篇近几年的点云论文及数据集,包括点云配准、点云分割、点云检测、点云补全、无监督学习等方向。下述3DMatch数据集的统计分析的代码均可在这里访问。一、3DMatch数据集简介3DMatch数据集收集了来自于62个场景的数据,其中54个场景的数据用于训练,8个场景的数据用于评估,其具体名称查看train.txt和test.txt。3DMatch数据常用于3D点云的关键点,特征描述子,点云配准等任务。官方主页 | 3DMatch: Learning Local
文章目录01 - os_send_signal()和os_set_ready()的区02 - 总结01 - os_send_signal()和os_set_ready()的区 假设Task_A调用set_ready() / send_signal(),对象是Task_B,Task_A --> Task_B,从双方的角度看: 1、对于Task_B进入ready:set_ready(...
基于SpringCloud分布式架构为什么要使用分布式架构Spring Cloud 专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖分布式/版本化配置服务注册和发现路由Service-to-Service 调用负载均衡断路器分布式消息传递这是分布式的优点,这样看起来可能比较抽象,举个例子来说,对于单体服务来说,如果我想更新订单中的某个功能,我是不是需要重启...
VS Code红色波浪线报错处理VS Code编辑器:当移动到红色波浪线下边出现如下问题:既然不是语法问题,那可能就是编辑器设置上or插件问题:经过查阅资料,发现改一下我们的用户设置就可解决这个问题:在用户设置中加入下列一行代码成功完成"python.linting.pylintArgs": [ "--generate-members" ],...
色差宝专业款是一款不同以往的颜色工具,强大的性能配置,让色彩测量更专业;仪器可与安卓或IOS设备无线连接,极大的拓展了颜色测量仪器的应用边界;它将带您进入色彩管理新世界,可替代印刷、涂料、纺织等色卡,实现颜色读取、色卡查找功能。配套软件“颜色识别器”可以在各大应用市场搜索下载。一、颜色识别器APP介绍:该软件主要用于颜色的识别,可以根据颜色信息识别出相关的颜色信息,如颜色名称,颜色的HEX码,YUV,LAB,CMYK,HSL,HSV,YCBCR,LCH,还有颜色的中文名称和英文名称。支持从手机浏览照
C语言趣味编程100题1.百钱百鸡——解不定方程组1.百钱百鸡——解不定方程组/*问题描述:1只公鸡5钱,1只母鸡3钱,3只小鸡1钱,现有100钱要买100只鸡,改怎么买?问题分析:设买公鸡cock只,母鸡Hen只,小鸡chicken只列出如下不定方程:cock+hen+chicken=1005cock+3hen+chicken/3=100解决方法:实质是解不定方程,使用穷举法 */#include <stdio.h>int main(){ int cock, hen
codecombat极客战记森林21-40通关代码所有代码均使用python编写21.强攻ATETH塔hero.moveXY(55, 14)hero.moveXY(92, 18)# 在红色的 X 位置建造一个火焰陷阱hero.buildXY("fire-trap", 92, 18)# 撤退到木的 X 位置,来避免伤害。hero.moveXY(55, 14)# 等雇佣兵发现闪亮...
用迭代法求 平方根公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数输入X输出X的平方根样例输入4样例输出2.000#include<stdio.h>#include<math.h> //提供fabs函数(取绝对值)int main(){ float x1=2.0,x2; //x1的值任取,这个值只是运算的中间量,对最终结果不会产生影响,只会影响收敛速度.