静态代理、动态代理与AOP:

简单易懂:http://blog.csdn.net/hejingyuan6/article/details/36203505

补充:http://layznet.iteye.com/blog/1182924http://www.cnblogs.com/fingerboy/p/5335328.html

AOP:https://www.cnblogs.com/best/p/5679656.htmlhttps://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相关的更多相关文章

  1. Spring AOP相关术语

    ---------------------siwuxie095                                 Spring AOP 相关术语         (1)Joinpoint ...

  2. Spring中AOP相关源码解析

    前言 在Spring中AOP是我们使用的非常频繁的一个特性.通过AOP我们可以补足一些面向对象编程中不足或难以实现的部分. AOP 前置理论 首先在学习源码之前我们需要了解关于AOP的相关概念如切点切 ...

  3. Spring中AOP相关的API及源码解析

    Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...

  4. Spring框架学习05——AOP相关术语详解

    1.Spring AOP 的基本概述 AOP(Aspect Oriented Programing)面向切面编程,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查 ...

  5. aop相关术语

    AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面的编程.并不是全部的AOP框架都是一样的.他们连接点模型的功能可能有强弱之分,有些可以字段,方法,构 ...

  6. AOP 相关包

    aop 命名空间,jar 扫路径

  7. Spring AOP四种实现方式Demo详解与相关知识探究

    一.前言 在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版.代码格式有强迫症的人来说,实在是不能忍受~~~~(>_<)~~~~ ...

  8. 【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)

    [AOP]操作相关术语 Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点. Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add ...

  9. Spring基础[IOC/DI、AOP]

    一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...

随机推荐

  1. tp5 项目实战 初级 文字步骤

    项目实战 环境搭建 新建模块  admin 新建文件夹 controller   model  view View   中新建 user  index 相关样式  js   图片     放入publ ...

  2. 面向对象 公有私有 property classmethod staticmethod

    接口类(抽象类)--------就是一种规范 面向对象的私有与公有 对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的访问限制不 ...

  3. debian8.2安装kubernetes

    master上通过kubeadm安装Kubernetes 添加国内阿里源后安装kubeadm: deb https://mirrors.aliyun.com/kubernetes/apt/ kuber ...

  4. mysql数据备份和还原

    MySQL是一个永久存储数据的数据库服务器.如果使用MySQLServer,那么需要创建数据库备份以便从崩溃中恢复.mysql提供了一个用于备份的实用程序mysqldump. 1.普通.sql文件中的 ...

  5. mysql数据库,编码错误解决

    在写代码的过程中,经常会遇见,将中文字符输入到mysql数据库中,但是查看的时候,却发现,中文显示为乱码的情况,让人相当的头疼,今天正好解决了一个这样遇到的问题,所以简单总结一下: 1.首先查看数据库 ...

  6. 转:C++中临时对象及返回值优化

    http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行 ...

  7. Object empty value key filter

    Object empty value key filter 过滤空值 Utils emptykeysFilter() "use strict"; /** * * @author x ...

  8. 输入的是util包下面的 时间, 接受的是java.sql.date 或者 java.util.date类型

  9. Elasticsearch1.x 和Elasticsearch2.x 拼音分词插件lc-pinyin安装教程

    Elasticsearch1.x 基于lc-pinyin和ik分词实现 中文.拼音.同义词搜索 https://blog.csdn.net/chennanymy/article/category/60 ...

  10. COGS 497——奶牛派对

    奶牛派对 我们发现每头牛需要走的路程即为它到x的最短路+x到它的最短路. 转化: 于是这道题变成了一道典型的单源最短路问题,只需求出每个点到x的最短路dl,以及从x到此点的最短路d2,然后去找max( ...