一.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. OCP 12c最新考试原题及答案(071-5)

    5.(4-12) choose two: You executed the following CREATE TABLE statement that resulted in an error: SQ ...

  2. 如何构建debian包

        1)安装dh_make如下: sudo apt-get intasll aptitude sudo aptitude install dh_make    2)以jsoncpp为例,说明如何生 ...

  3. UItextfield各个通知和回调的顺序

    成为第一响应者之前,调用delegate的textFieldShouldBeginEditing(_:)方法 成为第一响应者 发送通知UIKeyboardWillShow和UIKeyboardDidS ...

  4. POJ2259 Team Queue (JAVA)

    第一次TLE,对每个group重新设置Queue中定位,定位到每个group的最后一个元素,但WA 经过检查,DEQUEUE时没有根据情况重新计算group,插入时没有根据情况重新给last赋值 贴A ...

  5. js和jquery获取属性的区别

    一.获取元素: js获取元素: 根据id获取:document.getElementById("id"); 根据类名获取:document.getElementsByClassNa ...

  6. 做point data的切面的时候的注意事项

    正确的顺序应该是: 先导入cell data,再转换为point data,再做切面.结果如下: 如果这里导入cell data以后先做了切面再转换为point data,结果就是这样的: 很明显中间 ...

  7. Go语言内置类型和函数

    内置类型 内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此 ...

  8. python3 zip压缩

    参考: https://docs.python.org/3/library/zipfile.html https://zhidao.baidu.com/question/149840976436638 ...

  9. [转]矩阵树$Matrix-Tree$定理与行列式

    [https://www.cnblogs.com/zj75211/p/8039443.html][矩阵树Matrix-Tree定理与行列式]

  10. vue element 常见问题

    1. vue2.0 给data对象新增属性,并触发视图更新  $set this.$set(this.ossData, "signature", 222) // 正确用法 // 数 ...