二:SpringAOP
一.AOP 面向切面编程思想
横向重复,纵向抽取
以前的案例中: filter中, 动态代理 , interceptor
二.动态代理
1.通过动态代理可以体现aop思想
2.对目标对象中的方法进行增强
三.spring实现aop的原理
- 动态代理(优先)
被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术 - cglib代理(没有接口)
第三方代理技术,cglib代理.可以对任何类生成代理.代理的原理是对目标对象进行继承代理. 如果目标对象被final修饰.那么该类无法被cglib代理.
四.spring aop开发:可以对任何类进行代理增强
spring封装了动态代理代码.不需要手写动态代理代码.封装了cglib代理.
五.spring中名词:
Joinpoint(连接点): 目标对象中,所有可以增强的方法
Pointcut(切入点): 目标对象,已经或需要增强的方法
advice(通知/增强): 需要增强的代码.
weaving(织入): 动词.将通知应用到切点的过程.
target(目标对象): 被代理对象.
proxy(代理对象): 将通知织入到目标对象之后,形成代理对象
aspect(切面): 切入点+通知
六.步骤
导包
4+2:核心包+日志包
2:spring中aop+aspect
2:spring依赖包:aop联盟+weaving准备目标对象
准备通知类
前置通知
后置通知 方法正常结束
环绕通知
异常拦截通知
后置通知 无论如何都执行配置文件中配置,导入aop约束
目标对象
通知对象
配置aop:config
<aop:config>
<aop:ponint-cut id="切点名称" expression="execution(切点表达式)" />
<aop:aspect ref="通知对象名称" >
<aop:before method="" ponintcut-ref="" />
<aop:after-returning method="" ponintcut-ref="" />
<aop:around method="" ponintcut-ref="" />
<aop:after-throwing method="" ponintcut-ref="" />
<aop:after method="" ponintcut-ref="" />
</aop:aspect>
七.扩展:使用注解完成aop
导包
4+2
2 aop+aspect
2 aop联盟+weaving准备目标对象
准备通知类
前置通知
后置通知 方法正常结束
环绕通知
异常拦截通知
后置通知 无论如何都执行配置文件中配置,导入aop约束
- 目标对象
- 通知对象
<aop:aspect-autoproxy>开启注解aop
注解
@Aspect 指定当前类是通知类
@Before 前置通知方法
@after-returning 后置通知方法
@around 环绕通知方法
@after-throwing 异常拦截通知方法
@after 后通知方法
@PointCut 抽取切点表达式
二:SpringAOP的更多相关文章
- 23-Java-Spring框架(一)
一.Spring框架了解 Spring框架是一个开源的框架,为JavaEE应用提供多方面的解决方案,用于简化企业级应用的开发,相当于是一种容器,可以集成其他框架(结构图如下). 上图反映了框架引包的依 ...
- Spring框架学习之SpringAOP(二)
AOP概念 AOP(Aspect-Oriented Programming,面向切面编程),AOP是OOP(面向对象编程)的补充和完善 AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用 ...
- Spring-AOP之工作实践(二)
案例二.前端页面权限控制 对controllor控制器中的某写方法进行增强,如实现页面的按钮权限控制. /** * 保存session的容器 */ public class SessionContex ...
- spring-aop(二)学习笔记
常用增强处理类型 增强处理类型 特点 before 前置增强处理,在目标方法前织入增强处理 ...
- Spring-AOP源码分析随手记(二)
这次来分析下切面的执行过程. 1.怎么看? 怎么开始看源码呢?就直接从被增强的方法调用那里打断点,看看怎么执行的: 然后就来到了这: 2.初步分析 里面有段: if (this.advised.exp ...
- 基于注解的SpringAOP源码解析(二)
在上篇文章 中我们搭建了一个阅读源码的demo工程,然后简单介绍了一下@EnableAspectJAutoProxy注解,这个注解最重要的功能就是为向Spring中注入了一个beanAnnotatio ...
- Spring学习(二)
1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控 ...
- WebService技术(二)— CXF
前言:学习笔记,以供参考 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services .可以与Spring进行快速无 ...
- Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
随机推荐
- 微信小程序的onLaunch()方法和onShow()方法
在app.js里面你会发现一个onLaunch()方法,这个方法是当小程序加载完毕后就执行的方法,此外,还有一个onShow()方法,先看下面的代码 app.js //app.js App({ onL ...
- TCP和UDP的最完整的区别【转】
来源:https://blog.csdn.net/li_ning_/article/details/52117463 TCP UDPTCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统 ...
- 本地Windows环境下安装MySql
Windows 上安装 MySQL Windows 上安装 MySQL 相对来说会较为简单,你需要在 MySQL 下载中下载 Windows 版本的 MySQL 安装包. Download Link: ...
- php中的list()用法中要注意的地方
php中list()函数是用数组对一列值进行赋值, 该函数只用于数字索引的数组,且假定数字索引从0开始.(这句话很重要,是从索引0开始为变量赋值,如果对应的数字索引不存在,则对应位的变量也为空值.) ...
- redis删除指定前缀的缓存
redis作为缓存服务器为MySQL数据库提供较高的防御性,对于一些数据的查询可以直接从缓存中可以进行查询. 但是,某些情况下,我们需要清除缓存. 以下场景: 公司经常做活动,每个活动都存在大量的数据 ...
- Python实现——二层BP神经网络
2019/4/23更新 下文中的正确率极高是建立在仅有50组训练数据的基础上的,十分不可靠.建议使用提供的另一个生成训练集的generate_all函数,能产生所有可能结果,更加可靠. 2019/4/ ...
- PHP开发微信公众号(一)二维码的获取
要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sa ...
- iOS 循环轮播框架思路
使用3个imageview实现无线轮播的大致原理 将3个imageview添加到scrollview上面,scrollview的contensize是3个imageview的宽度,设置scrollvi ...
- [转] linux nc命令
[From] https://blog.csdn.net/freeking101/article/details/53289198 NC 全名 Netcat (网络刀),作者是 Hobbit & ...
- odoo 二次开发的一些原理
一:self是什么 目前新版的Odoo中使用到的self,是对 游标cr.用户ID.模型.上下文.记录集.缓存 的封装. 我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr. ...