Spring in Action 4th 学习笔记 之 AOP

先说说为什么需要AOP

最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法。但这,真的很笨。。。

好的方法,应该是通过反射获取方法,然后去匹配,如果需要记录日志,那就调用日志方法即可。

这就是AOP 的Weaving,俗称编织、织入,就是将需要添加的功能编织到现有功能中,而不需要修改现有代码。

另一个例子,不那么大众的需求:我想给一个对象添加方法,怎么实现?

如果有学过js、Python等动态语言,你肯定知道它们支持给对象添加方法,直接添加即可。

但是Java不行,因为Java的类型是封闭的。

Spring给出办法就是通过代理,拦截请求,然后去调用实际拥有该方法的对象的该方法!(略绕) 这就是Introduction,俗称引入。

如图:

这是书中自带的图片,很形象。

如图所示,如果调用Advised bean的Existing method,那就是Weaving(织入);如果调用introduced method,那就是Introduction。

但是,无论那种,Spring都是通过其代理功能实现的。(如果你已经知道Spring的代理功能仅限于method,那你也可以想到Spring AOP仅限于method --- 稍后讨论)

以上,记住一点就行:Spring AOP中给方法添加功能就是织入,给对象添加功能就是引入

(至于为什么强调是Spring AOP,这是因为还有其他的AOP框架,稍后讨论。)

再列一下其他概念:

Weaving织入部分:

  Advice : 需要添加的功能,例如日志功能、权限功能等,以及什么时候添加(目标方法执行前、后、异常等时候)。

  Join-point : 目标类中能够添加功能的地方!

  Pointcut : 指定目标类中添加功能的地方!因为不可能给所有Join-point织入Advice!(Spring AOP仅限于方法,因为它基于代理实现。其他的框架还可以针对字段添加功能!了解就行。)

  需要注意的是,Advice定义了什么时候做、做什么,而Pointcut则定义了在哪里做。

  Aspect = Advices + Pointcuts     // Aspect可以认为是一堆Advice的类,且其中指定了每个Advice执行的Pointcut。
Introduction引入部分:

  暂无

以上,Pointcut是关键,它决定了一个AOP框架的行为。

因为Pointcut意味着where(field?method?exception?)和when(编译时?加载时?运行时?)。

【】通常,使用class和method name来定义Pointcut,或者使用正则表达式匹配class和method name来定义Pointcut!!!

<!-- 未完待续,先睡觉了。。 -->

时间: 2024-10-19 07:01:00

Spring in Action 4th 学习笔记 之 AOP的相关文章

Spring in Action 4th 学习笔记

约定: 一.@Xxx Class 表示被@Xxx注解的类.同理还有@Xxx注解的字段或方法. 例如:@Bean Method. 二.@Component Class 同时代指 @Controller.@Service.@Repository. All beans in a Spring application context are given an ID. -- 如果不指明,也会给定一个默认的ID:类名,首字母小写.[]上面这句,不适合XML方式,因为XML方式的默认ID是全路径再加上#{n}

Spring In Action 4 学习笔记(一)Spring概览

Spring的核心概念就是DI和AOP,是Spring实现所有复杂华丽框架的基石. 相对于EJB等重型框架,Spring更加轻量化,可以强化普通的POJO对象. 1.简化JAVA开发 为了尽可能简化Java的开发,Spring遵循如下4个策略: Lightweight and minimally invasive development with POJOs 使用POJO类进行轻量化低侵入式的开发 Loose coupling through DI and interface orientati

Spring实战-Spring in Action, 4th Edition-2015年第4版本

In Action系列中最畅销的Spring图书,近十万读者学习Spring的共同选择!In Action系列中最畅销的Spring图书,有近10万读者选择本书来学习Spring! Spring框架已经成为Java开发人员的必备知识,而且Spring 3引入了强大的新特性,例如SpEL.Spring表达式语言.IoC容器的新注解以及用户急需的对REST的支持.无论你是刚刚接触Spring还是被Spring 3.0的新特性所吸引,本书都是掌握Spring的最佳选择. 下载地址: Spring in

[Spring Data Repositories]学习笔记--定义自己的repository

有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someCustomMethod(User user); } 2. 定义实现 class UserRepositoryImpl implements UserRepositoryCustom { public void someCustomMethod(User user){ //Your custom im

[Spring Data Repositories]学习笔记--为repository添加通用的方法

如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1.5.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories 1. 定义自己的repository,要从基础的repository进行继承. public interf

[Spring Data Repositories]学习笔记--使用现有的repository

以下内容是在学习Spring-Data-mongoDB中的Spring Data Repositories时做的一些笔记.备忘! 感觉学习还是看官方的资料比较透彻一些. Spring Data Repositories目的:减少重复的持久化代码. 常用的几个repository interface, Repository <-- CurdRepository <-- PagingAndSortingRepository 最后一个主要是用来做分页和排序用的. Repository使用步骤 1.

spring in action 4th --- quick start

读spring in action. 不是特别聪明的人,只好多练习,多实践.读书和思考很容易变得混乱,因为没有实践.因此,虽然花了很多时间,还是要动手记录下来. 环境搭建 quick-start 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个gradle项目 在idea中,new -> project -> gradle 创建一个空项目.创建成功后修改build.gradle : group 'com.test' version

Spring in Action 学习笔记三-AOP

面向切面的Spring 2015年10月9日 11:30 ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-9 14:30 ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-9 14:38 ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-9 14:38 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-10 14:42 ? ? ? ? ? ? ? ? ? 屏幕剪辑的捕获时间: 2015-10-10 14:43

Spring+SpringMVC+MyBatis集成学习笔记【一】

一,首先要清楚,SpringMVC其实就是Spring的一个组件       例如我们知道Spring中有类似于,AOP TX等等类似的组件,所以SpringMVC其实就是Spring的一个组件,是Spring框架的一部分,千万不要把SpringMVC当成是另一种框架!       所以在配置上,还是按照配置Spring的套路来,该配置监听,配置监听,该配置配置文件,配置配置文件,一切照旧 二,Spring在Web.xml中的配置       在Web.xml中配置Spring大致可以分为两点