一.AOP 面向切面编程思想

横向重复,纵向抽取

以前的案例中: filter中, 动态代理 , interceptor

二.动态代理

1.通过动态代理可以体现aop思想

2.对目标对象中的方法进行增强

三.spring实现aop的原理

  1. 动态代理(优先)

    被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术
  2. cglib代理(没有接口)

    第三方代理技术,cglib代理.可以对任何类生成代理.代理的原理是对目标对象进行继承代理. 如果目标对象被final修饰.那么该类无法被cglib代理.

四.spring aop开发:可以对任何类进行代理增强

spring封装了动态代理代码.不需要手写动态代理代码.封装了cglib代理.

五.spring中名词:

Joinpoint(连接点): 目标对象中,所有可以增强的方法

Pointcut(切入点): 目标对象,已经或需要增强的方法

advice(通知/增强): 需要增强的代码.

weaving(织入): 动词.将通知应用到切点的过程.

target(目标对象): 被代理对象.

proxy(代理对象): 将通知织入到目标对象之后,形成代理对象

aspect(切面): 切入点+通知

六.步骤

  1. 导包

    4+2:核心包+日志包

    2:spring中aop+aspect

    2:spring依赖包:aop联盟+weaving

  2. 准备目标对象

  3. 准备通知类

    前置通知

    后置通知 方法正常结束

    环绕通知

    异常拦截通知

    后置通知 无论如何都执行

  4. 配置文件中配置,导入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

  1. 导包

    4+2

    2 aop+aspect

    2 aop联盟+weaving

  2. 准备目标对象

  3. 准备通知类

    前置通知

    后置通知 方法正常结束

    环绕通知

    异常拦截通知

    后置通知 无论如何都执行

  4. 配置文件中配置,导入aop约束

    • 目标对象
    • 通知对象
    • <aop:aspect-autoproxy> 开启注解aop
  5. 注解

    @Aspect 指定当前类是通知类

    @Before 前置通知方法

    @after-returning 后置通知方法

    @around 环绕通知方法

    @after-throwing 异常拦截通知方法

    @after 后通知方法

    @PointCut 抽取切点表达式

二:SpringAOP的更多相关文章

  1. 23-Java-Spring框架(一)

    一.Spring框架了解 Spring框架是一个开源的框架,为JavaEE应用提供多方面的解决方案,用于简化企业级应用的开发,相当于是一种容器,可以集成其他框架(结构图如下). 上图反映了框架引包的依 ...

  2. Spring框架学习之SpringAOP(二)

    AOP概念 AOP(Aspect-Oriented Programming,面向切面编程),AOP是OOP(面向对象编程)的补充和完善 AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用 ...

  3. Spring-AOP之工作实践(二)

    案例二.前端页面权限控制 对controllor控制器中的某写方法进行增强,如实现页面的按钮权限控制. /** * 保存session的容器 */ public class SessionContex ...

  4. spring-aop(二)学习笔记

    常用增强处理类型 增强处理类型                                                        特点 before 前置增强处理,在目标方法前织入增强处理 ...

  5. Spring-AOP源码分析随手记(二)

    这次来分析下切面的执行过程. 1.怎么看? 怎么开始看源码呢?就直接从被增强的方法调用那里打断点,看看怎么执行的: 然后就来到了这: 2.初步分析 里面有段: if (this.advised.exp ...

  6. 基于注解的SpringAOP源码解析(二)

    在上篇文章 中我们搭建了一个阅读源码的demo工程,然后简单介绍了一下@EnableAspectJAutoProxy注解,这个注解最重要的功能就是为向Spring中注入了一个beanAnnotatio ...

  7. Spring学习(二)

    1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控 ...

  8. WebService技术(二)— CXF

    前言:学习笔记,以供参考 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services .可以与Spring进行快速无 ...

  9. Spring-AOP实践 - 统计访问时间

    公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...

随机推荐

  1. jmeter之jtl文件解析(生成测试报告)

    我们知道命令行的方式执行完成jmeter后,会生成jtl文件,里面打开后就是一行行的测试结果, <httpSample t="1" lt="1" ts=& ...

  2. Flink学习笔记:Flink API 通用基本概念

    本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...

  3. 斐讯K2P配置文件破解笔记

    手上有一个斐讯K2P路由器,刷机前我想把原机带的固件备份出来.搜到恩山A大开启telnet.固件备份的教程,里面提到了配置文件破解的方法,心血来潮试了一下,发现算出的密码不能解密,一直报"b ...

  4. leetcode-812-Largest Triangle Area

    题目描述: You have a list of points in the plane. Return the area of the largest triangle that can be fo ...

  5. 2016级算法第二次上机-D.Bamboo的饼干

    Bamboo的饼干 分析 从两个数组中各取一个数,使两者相加等于给定值.要注意去重和排序 难度不大,方法很多,基本只要不大于O(n^2 ) 的都可以过.本意想考察二分搜索 还可以借助stl中的map, ...

  6. HTML-制作图片的自动播放和手动切换

    思路:将想要播放的图片放入集合中,设置一个div,将图片依次从集合中定时取出放到div中展示:设置一个变量,通过变量与集合元素索引联系起来,点击改变时,获取当前图片的索引以切换图片 整体代码: < ...

  7. Oracle PL/SQL学习之Hello World(0)

    1.PL/SQL是Oracle数据库的一大创举,让一些复杂繁琐的常规主流编程代码做的编码处理过程,只需要在PL/SQL中使用简短的几句代码就可以解决,并且准确高效.那么遵循惯例,我们学习PL/SQL编 ...

  8. 洛谷 P4234 最小差值生成树(LCT)

    题面 luogu 题解 LCT 动态树Link-cut tree(LCT)总结 考虑先按边权排序,从小到大加边 如果构成一颗树了,就更新答案 当加入一条边,会形成环. 贪心地想,我们要最大边权-最小边 ...

  9. 爱漂泊人生 30个php操作redis常用方法代码例子

    http://www.justwinit.cn/post/8789/ 背景:redis这个新产品在sns时很火,而memcache早就存在, 但redis提供出来的功能,好多网站均把它当memcach ...

  10. 深刻理解Python中的元类(metaclass)(转)

    转载地址:http://blog.jobbole.com/21351/ 另外有几点理解记录下: 创建一个实例时,有时会传入参数,这些参数会同时传入 __init__() 和 __new__(),如: ...