AOP相关
静态代理、动态代理与AOP:
简单易懂:http://blog.csdn.net/hejingyuan6/article/details/36203505
补充:http://layznet.iteye.com/blog/1182924,http://www.cnblogs.com/fingerboy/p/5335328.html
AOP:https://www.cnblogs.com/best/p/5679656.html,https://www.cnblogs.com/hadoop-dev/p/7095464.html
Spring AOP常用的四种实现方式:http://www.360doc.com/content/10/1215/11/4957029_78291485.shtml
图解:
AOP有两种实现方式:预编译和动态代理。
例如事务处理:我们希望任何数据库操作的方法,尤其是insert,update需要做这种事务的处理,那我们肯定不希望在每一个方法上手动地开启事务,得到连接,提交事务,关闭连接,这样做成本很大,效率很低,所以我们希望有一种方式,对于开发人员是透明的,执行到某一个方法或是某种类型的方法,具有某种特点的方法,或者是某一层的类,比如说service或者以service结尾的类的时候,我们就可以开启事务控制,这就是一种实现统一维护的技术,实现方式有预编译和动态代理两种。
Spring没有提供AOP方式的日志系统,我们需要使用AOP(面向切面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。
配置切面:
实现:
图释:
将aBean这个bean作为一个切面来生命,id为myAspect
point概念及应用:
Spring没有提供AOP方式的日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。
图释:
这里的mappedNames就是要匹配的方法名的集合,这里<list>标签中的<value>也就是其中之一,这里sa*表示,映射的方法是以sa开头的所有的方法
例子:
xml配置文件:
接口:
实现类:
例子:
例子:
例子:
例子:
例子:
配置切入点:
在AOP中通知advice和一个切入点表达式相关联
图释:
上面的五个execution是Spring的AOP和AspectJ都支持的,下面的三个只有Spring的AOP支持的,
具体解释:
实现:
配置通知advice:
图释:
method是说明前置通知会调用哪个方法去执行,这个方法在aBean里进行实现
图释:
这里returning表示限制了method方法的返回值
例子:
切面类:
业务类:
测试类:
xml配置:
引入introductions:
Spring把引入当成一种特殊的通知,也就是一种特殊的包围通知,因为引入只能用在类这一等级上,所以我们使用引入时不能用切入点,引入为类增加了新的接口实现,而切入点定义一个通知涉及的那些方法。
introductions官方释义:允许一个切面声明一个实现指定接口的通知对象,并且提供一个接口实现类来代表这些对象。
例如:在xml配置文件中声明了一个before或者after,它们都会匹配到一个具体的实现类,如果使用declare-parents,它会给所有匹配的类型一个新的parent,也就是通过AOP的方式去给指定的匹配到的类型一个新的父类。
图释:
types-matching匹配什么样的类型,implement-interface具体使用哪一个接口,这也就是实现指定接口的通知对象,这个接口也就是通过implement-interface指定的,并且提供一个接口实现类来代表这个对象,接口实现类就是由default-impl来指定的。
我们在执行getBean之后,会把types-matching匹配的类强制转成下面声明的接口,为什么能强制转换,是因为declare-parents会用于声明所有匹配的类型拥有一个新的parent,也就是当前这个declare-parents匹配到了myService对应的这个类,所以它会给这个类指定一个新的parent,也就是UsageTracked,所以这里面改能做这种强制转换。
例子:
接口:
实现类:
xml配置文件:
测试类:
Advisors:
例子:
切面类:
service类:
测试类:
xml配置文件:
运行结果:
注意中间有一个空行,是测试类中执行了invoke方法之后再执行invokeException得到的。
AOP相关的更多相关文章
- Spring AOP相关术语
---------------------siwuxie095 Spring AOP 相关术语 (1)Joinpoint ...
- Spring中AOP相关源码解析
前言 在Spring中AOP是我们使用的非常频繁的一个特性.通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分. AOP 前置理论 首先在学习源码之前我们需要了解关于AOP的相关概念如切点切 ...
- Spring中AOP相关的API及源码解析
Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...
- Spring框架学习05——AOP相关术语详解
1.Spring AOP 的基本概述 AOP(Aspect Oriented Programing)面向切面编程,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查 ...
- aop相关术语
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面的编程.并不是全部的AOP框架都是一样的.他们连接点模型的功能可能有强弱之分,有些可以字段,方法,构 ...
- AOP 相关包
aop 命名空间,jar 扫路径
- Spring AOP四种实现方式Demo详解与相关知识探究
一.前言 在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版.代码格式有强迫症的人来说,实在是不能忍受~~~~(>_<)~~~~ ...
- 【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)
[AOP]操作相关术语 Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点. Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add ...
- Spring基础[IOC/DI、AOP]
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
随机推荐
- 完整Android开发基础入门博客专栏
博客地址:http://www.runoob.com/w3cnote/android-tutorial-contents.html
- IDEA运行lambda表达式
在idea写了一个lambda的测试例子,但是运行一直报错, public class LambdaTest { public static void main(String[] args) { ne ...
- mysql原理以及相关优化
说起MySQL的查询优化,相信大家积累一堆技巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在 ...
- PAT 1040 有几个PAT
https://pintia.cn/problem-sets/994805260223102976/problems/994805282389999616 字符串 APPAPT 中包含了两个单词 PA ...
- javascript string对象方法replace
最简单的replace用法是: var str = 'aaaaa9876b0000'; str.replace(/a/g,'A'); 有时候我们希望只是在匹配的位置添加特定的字符: var str = ...
- httpclient upload file
用httpclient upload上传文件时,代码如下: HttpPost httpPost = new HttpPost(uploadImg); httpPost.addHeader(" ...
- BZOJ5322 [Jxoi2018]排序问题 【贪心】
题目链接 BZOJ5322 题解 意思就是使有序的排列尽量少 就是使相同的数尽量少 然后大力贪心即可 #include<algorithm> #include<iostream> ...
- boost 文件操作
void testFileSystem() { boost::filesystem::path path("/test/test1"); //初始化 boost::filesyst ...
- POJ1062:昂贵的聘礼(dfs)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 58108 Accepted: 17536 题目链接:http ...
- HDU3081:Marriage Match II (Floyd/并查集+二分图匹配/最大流(+二分))
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...