如何理解springaop
初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是oop的一种有益补充等等,一下子让你不知所措,心想着:怪不得很多人都和我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括IOC,包括许许多多这样的名词,都是万变不离其中而已。
为什么用aop?
1、 就是为了方便,看一个国外很有名的大师说,编程的人都是“懒人”,因为他把自己做的事情都让程序做了。用了aop能让你少些很多代码,这点就够充分了吧。
2、 就是为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去想一些其他的事情,这些其他的事情包括:安全,事物,日志等。
初看这么多术语,一下子都不好接受,慢慢来,很快就会搞懂。
1、 通知(Advice):就是你想要的功能,也就是上面说的安全事物日志等。你给先定义好吧,然后在想用的地方用一下!
2、 连接点(JoinPoint):这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点,其他如aspectj还可以让你在构造器或者属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前虎吼(抛出异常),搜是连接点。
3、 切入点(Pointcut):上面说的连接点的基础上。来定义切入点,你的一个类里,有15个方法,那就是几十个连接点对吧!但是你并不想在多有方法赴京都使用通知(使用叫植入,以后再说),你只是想让其中的几个,在调用这几个方法之前、之后或者抛出异常时干点什么,那么就用切点来定义表这几个方法,让切点来筛选连接点,选中那几你想要的方法。
4、切面(Aspect):切面是通知和切入点的结合,现在发现了吧?没有连接点什么事情,连接点就是为了让你更好的理解切点,搞出来的。明白这个概念就行了。通知说明了干什么和什么时候干(什么时候是通过方法明中的before、after、around等能知道),而切入点说明了在哪干(指定到底那个方法)这就是一个完整的切面的定义。
5、引入(Introduction):允许我们向现有的类添加新方法属性,这不就是把切面(也就是把新方法属性:通知定义的)用到目标类中吗?
6、目标(Target):引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们植入切面。而自己专注于业务本身的逻辑。
7、代理(Proxy):怎么实现整套的aop机制的,都是通过动态代理。
8、织入(Weaving):把切面应用到目标对象来创建新的代理对象的过程。
如何理解springaop的更多相关文章
- 深入理解springAOP
概念:AOP(Aspect-Oriented Programming)即面向切面编程.它是对传统的OOP(面向对象)编程的一种补充,在OOP中往往一个对象有什么行为我们就定义什么方法,对象与对象之间存 ...
- 深入理解SpringAOP之代理对象
本篇文章主要带大家简单分析一下AOP的代理对象,至于AOP是什么,如何配置等基础性知识,不在这里讨论.阅读前请先参考:代理模式,在这之前我们需要了解springframework的三个核心接口与get ...
- 深入理解springAOP切面的特性
一张图说明情况
- ssm知识点整理
第1章 resultType和resultMap的区别是什么? MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType ...
- 【设计模式】Java设计模式 - 单例模式
[设计模式]Java设计模式 - 单例模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 分享学习心得,欢迎指正,大家一起学习成长! 原创作品,更多关注我CSDN: ...
- 【设计模式】Java设计模式 - 原型模式
[设计模式]Java设计模式 - 原型模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
- 【设计模式】Java设计模式 - 适配器模式
[设计模式]Java设计模式 - 适配器模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一 ...
- 【设计模式】Java设计模式 - 桥接模式
[设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
- 【SpringAop】【统一日志处理】注解方式理解以及使用
[注意:本次代码的demo会存在百度网盘,由于公司的保密,禁止上传,所以仅本人可见] 目前公司在做数据资产项目,数据质量部分使用到了springaop做统一日志处理,以前对这块有了解,有点模糊不清,今 ...
随机推荐
- linux mint19 解决docker必须使用sudo问题
1 安装完docker 使用时,提示权限不够 ~$ docker info Got permission denied while trying to connect to the Docker da ...
- ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash
rails 开发中 5.1版本使用binding.pry会报 ActionController::UnfilteredParameters: unable to convert unpermitted ...
- PHP之mb_convert_variables使用
mb_convert_variables (PHP 4 >= 4.0.6, PHP 5, PHP 7) mb_convert_variables - Convert character code ...
- Java 中 String 的常用方法(二)
本文介绍剩下的一些常用的 String 中的方法. 1.replace 方法 .replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char ne ...
- easyform表单校验插件改版源码
改动特性: 1.支持回调,可用于ajax提交 2.提示框样式修改,原版太丑,修改成bootstrap的popover 样式 原版还存在缺陷:被校验的表单元素设置不灵活,还得加上id.name 什么的 ...
- 转换json和字符串的一些方法
将字符串转换成json对象的方法: var str = '{"name1":"value1","name2":"value2&qu ...
- Java - 将可变性最小化
不可变类,即实例不能被修改的类,实例中包含的所有信息在对象的生命周期内固定不变. 常见的比如String.基本类型的封装类.BigDecimal.BigInteger. 相对与可变类,不可变更易于设计 ...
- 如何在没有https环境下使用webrtc
新版本的webrtc使用需要Https,但是在内网开发调试时,要配置Https环境比较麻烦,下面的方法是教你如何在http下使用webrtc 1,点桌面上的Chrome图票,右键->属性,把目票 ...
- 二、hive shell常用命令
在使用hive shell之前我们需要先安装hive,并启动hdfs 请参考:https://www.cnblogs.com/lay2017/p/9973298.html hive shell 我们先 ...
- java一些对象概念扫盲帖(DO VO DTO PO)
资料来源:http://virusswb.blog.51cto.com/115214/458636 BO:Business Object,业务对象.主要是承载业务数据的实体.处理业务逻辑的时候使用,数 ...