一.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. 《OD大数据实战》环境整理

    一.关机后服务重新启动 1. 启动hadoop服务 sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode ...

  2. Linux多网口绑定配合华为5700 eth-trunk技术,提高网络性能

    在实际的环境中,服务器通过网口绑定技术,可以很容易的实现网口冗余,负载均衡,从而达到高可用的目的,而且可以提升网络的性能,大幅的提升网络I/O. 一般情况下,Linux的多网口绑定使用的是内核中的“b ...

  3. Android app ADB命令

    * 查看设备 adb devices ps这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 若有多台安卓设备,可以通过在adb后面加上 -s <设备id&g ...

  4. 2016级算法第四次上机-A.Bamboo 和人工zz

    Bamboo和人工ZZ 题意: 非常直白,经典的动态规划矩阵链乘问题 分析: 矩阵链A1A2..An满足结合律,可以使用加括号的方式,降低运算代价. 一个pq的矩阵和一个qr的矩阵相乘,计算代价为pq ...

  5. Windows下Anaconda安装 python + tensorflow GPU版

    这里首先确认没有安装CPU版本,并默认已经安装了CUDA和Cudnn以及anaconda. 安装gpu版本的tensorflow 接下来需要安装GPU版本的tensorflow: 打开cmd并输入: ...

  6. 获取指定<文字行数>的<高度>是多少 TextKit

    - (CGSize)maxLineSizeWithLines:(NSInteger)lines constraintSize:(CGSize)size attributes:(NSDictionary ...

  7. BZOJ - 3295 三维偏序 空间转换

    题意:动态逆序对,共m次删除操作,求每次操作前的逆序对个数 删除操作转换为添加操作,首先对时间a进行简单排序 然后用cdq分治处理b维,树状数组处理c维 此时需要求的是对于某有序组\((a,b,c)\ ...

  8. 关于tp5全局过滤

    在config里面. // 默认全局过滤方法 用逗号分隔多个'default_filter' => 'htmlspecialchars',

  9. 【linux】如何查看文件的创建、修改时间

    本篇博文旨在介绍Linux下查看文件时间的方法:并介绍如何使用touch指令来进行文件时间的创建以及修改 如何查看文件的时间信息利用stat指令查看文件信息 三种时间的介绍ATime ——文件的最近访 ...

  10. Android中直接打开高德APP进行导航

    1.判断是否安装有高德APP //高德APPprivate PackageManager mPackageManager;private static List<String> mPack ...