前言
续上一节,继续学习 Spring 的一些概念和理论。
什么是 AOP
AOP,Aspect-Oriented Programming,面向切面编程。(是一种程序设计思想)
AOP:通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等,如下图
AOP 实现方式
预编译
- AspectJ
运行期动态代理(JDK动态代理、CGLib动态代理)
- SpringAOP
- JbossAOP
Spring 的 AOP 实现
- 纯 Java 实现,无需特殊的编译莞城,不需要控制加载器层次
- 目前只支持方法执行连接点
- 侧重于提供一种 AOP 实现和 Spring IoC 容器之间的整合,用于帮助解决企业应用中的常见问题
- Spring AOP 默认使用标准的 JavaSE 动态代理作为 AOP 代理,这使得任何接口(接口集)都可以被代理
- Spring AOP 中可以使用 CGLib 代理
AOP 基本概念
工欲善其事,必先利其器。还是得继续学习这些基本概念
Aspect(切面)
切面,是对交叉业务逻辑的统称。
Joinpoint(连接点)
连接点,指切面可以织入到目标对象的位置(方法,属性等)。
Advice(通知)
通知,指切面的具体实现。
Pointcut(切入点)
切入点,指通知应用到哪些类的哪些方法或属性之上的规则。
Introduction(引入)
引入,指动态地给一个对象增加方法或属性的一种特殊的通知。
Weaving(织入)
织入,指将通知插入到目标对象。
Target(目标对象)
目标对象,指需要织入切面的对象。
Proxy(代理对象)
代理对象,指切面织入目标对象之后形成的对象。
Spring Advice 类型
Before Advice(前置通知)
类全名:org.springframework.aop.MethodBeforeAdvice
在方法调用之前,做处理。
不能够改变返回值
不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)
After Returning Advice (返回后通知)
类全名:org.springframework.aop.AfterReturningAdvice
在方法调用之后,做处理。
不能够改变返回值
不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)
MethodInterceptor (拦截器)
类全名:org.aopalliance.intercept.MethodInterceptor
在方法调用之前以及之后,做处理。
- 可以改变返回值,也可以改变流程。
ThrowsAdvice (抛出异常后通知)
类全名:org.springframework.aop.ThrowsAdvice
在方法抛出异常后,做处理。
- 当该通知处理完异常后,会简单地将异常再次抛出给目标调用方法。
AOP 实现
理论看太多,该实际操作实践一下
基于 AspectJ 语言的实现方式
先新建两个简单的类
代码如下:
1 | package com.eliteams.quick4j.test.aopTest; |
1 | package com.eliteams.quick4j.test.aopTest; |
接下来编写切面类
1 | package com.eliteams.quick4j.test.aopTest; |
编写配置文件
applicationContext.xml 的内容如下:
1 | <?xml version="1.0" encoding="GBK"?> |
编写测试类
1 | package com.eliteams.quick4j.test.aopTest; |
测试结果
运行结果如下:
1 | I'm A |
后记
革命尚未成功,仍需努力
参考资料
- Spring 官网 https://spring.io/
- Spring wiki https://zh.wikipedia.org/wiki/Spring
- Spring 的注解注入 http://blog.csdn.net/baple/article/details/17891755
- Spring 入门 http://www.imooc.com/learn/196
- Spring 教程 http://www.yiibai.com/spring/
- Spring 核心技术学习总结 http://penghuaiyi.iteye.com/blog/182616
- Spring知识点总结大全 http://www.open-open.com/lib/view/open1329298931749.html
- Spring - 随笔分类 - 孤傲苍狼http://www.cnblogs.com/xdp-gacl/category/544380.html