Spring框架之-AOP
来源:互联网 发布:35岁程序员 编辑:程序博客网 时间:2024/05/18 01:27
在工作以及面试当中Spring是必不可少的,当然了简单的认知是spring的两大特性: IOC控制翻转(也是依赖注入)、AOP(面向切面)
首先什么叫aop,aop到底能做什么?大致意思是这样的
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
,然后他就认为,嗯,要用aop就必须导入这两个包
那我想说的是,你错了
那我们再来看看xml中又是怎么实现的
只是现在换成了xml方式了,那么你要问的是,不是说声明式事务不也是拿aop实现的吗
首先什么叫aop,aop到底能做什么?大致意思是这样的
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
例如我刚才所做的日志切面,记录每次的请求和响应消息入库
我并没有像某些人把插入库的方法写在每个请求的方法里,就像上面说的,减少重复代码,比如你有上百个方法,你要少写多少代码,其次就是如果哪天我不需要这个记录日志了,我直接去掉切面就可以,而不是去改代码,把每个插入的方法都删掉
最后回到aop是如何把它实现在项目中
首先要声明的是很多在学到aop这里,要导包,都会把这两个包导入进
,然后他就认为,嗯,要用aop就必须导入这两个包
那我想说的是,你错了
没这两个包照样可以实现aop
我们就利用spring自己的aop实现机制,虽说aop是有自己的实现机制,但还是得遵循aop联盟的api实现,也就是这个包这里面全是接口,是不是很熟悉里面的东西
那我们首先用硬编码的方式实现一个aop,什么叫做硬编码,也就是不用xml的方式
这是我调用某个方法前要做的事情,
那我们首先用硬编码的方式实现一个aop,什么叫做硬编码,也就是不用xml的方式
比如先来一个前置通知,调用某个方法前先做一件事情
这是我调用某个方法前要做的事情,
然后我们再来定于要调用的方法
看到没 就是这样
需要创建一个代理工厂类 然后把目标类给它 切面也给它 其它的什么后置增强 和环绕增强 都如此
这种写法 当然不会用到工作中 太死板了那我们再来看看xml中又是怎么实现的
前置通知还是找个通知
只是现在换成了xml方式了,那么你要问的是,不是说声明式事务不也是拿aop实现的吗
那如果用这种xml方式的写法 如何实现声明式事务啊
这就是spring自己的方式实现的声明式事务
然而我说了那么多 只是为了告诉你 spring从始至终都提供了自己的aop实现,但是太麻烦
我们真正喜欢用的是aspect,谁让别人是专业的,那我们先看看aspect是如何实现aop的,通过xml的方式
这个表达式就要根据你自己业务要求,看你的增强都需要加入哪些地方了
这样的配置是不是相当熟悉,也是广为项目所用的
最后再来说说最为方便的注解,还是aspect的实现
这里面默认是false默认false代表带着所有的代理全用jdk动态代理实现,
spring自带aop,只是平常用的一直都是aspect,spring集成的
呆会继续aspect是如何实现的
首先我们应该牢记 aop都有哪些增强
分别有 前置增强、后置增强、抛出增强、环绕增强、引入增强
增强也可以叫做通知 ,所以当某些人说XX通知时也没什么好异样的,aspect的xml实现如下首先我们要用<aop:config> 来进行aop配置 子元素中再配置切面
我们看看通知里面都有什么
这个通知并不需要实现任何类,但定义的方法必须遵守相关的规范,如不同的增强方法参数是有些区别的,如果不写的话,那么会异常,NoSuchMethodException
这个表达式就要根据你自己业务要求,看你的增强都需要加入哪些地方了
再来看看如果我们要声明式事务,不是说它也是拿aop做的嘛,一起看看aspect是如何给你做的。
这样的配置是不是相当熟悉,也是广为项目所用的
最后再来说说最为方便的注解,还是aspect的实现
首先要开启aop的aspect注解,需要在配置里加上一行配置
这里面默认是false默认false代表带着所有的代理全用jdk动态代理实现,
当你改为true时则用cglib动态代理实现
两者的区别也是常被考的
无非是需要jdk动态代理实现的目标类需要接口,而cglib动态代理实现的目标类不需要接口,它是直接生成新的字节码方式给你一个代理对象
所以当我们平常某个目标类,万一没写接口,其实也是可以被代理的,就很好理解了,这些都由spring aop底层帮你判断,默认jdk,没有接口,就用cglib
所以当我们平常某个目标类,万一没写接口,其实也是可以被代理的,就很好理解了,这些都由spring aop底层帮你判断,默认jdk,没有接口,就用cglib
10 1
- spring框架之AOP
- Spring框架之-AOP
- spring框架之aop
- spring框架之AOP
- AOP框架之:Spring AOP和AspectJ
- AOP框架之:Spring AOP和AspectJ
- AOP框架之:Spring AOP和AspectJ
- spring框架之AOP-1
- spring框架之AOP-2
- Spring框架之理解AOP
- SSH:Spring框架(spring之AOP)
- Spring框架学习之(四)--AOP
- Spring框架之IOC、AOP详解
- Java后台框架篇--Spring之AOP
- Spring框架之AOP面向切面编程
- Spring学习框架之四(AOP)
- Spring框架之浅析AOP切面编程
- AOP框架之:Spring 2.x AOP和AspectJ
- c语言--支言片语1
- spring boot 文件上传
- 在Solr中配置和使用ansj分词
- 蓝牙学习2---基本概念
- 升级spring,springmvc,spring security jar版本需要注意的点
- Spring框架之-AOP
- nRF52832 GPIOTE EVENT中断使用
- JS 时间格式CST转GMT
- Html5+CSS3基础知识汇总-CSS3篇
- Linux mount 命令挂载 卸载Windows 共享文件夹
- GeoProcessor的用法介绍
- 提高机器学习模型准确率的八大方法
- Redis基础知识
- 网易163邮箱模拟登录