Spring源码解析之四 ------ AOP原理和源码分析

本文深入探讨Spring的AOP实现,从代码演示到源码分析,揭示AOP如何利用动态代理增强方法。首先,介绍了动态代理的基础知识,接着通过一个AOP示例解释切面、切点、通知等概念,并展示了使用JDK动态代理实现AOP的步骤。随后,源码分析部分从`ctx.getBean("animal")`开始,逐步揭示AOP在调用方法前后的执行逻辑,重点解析了`JdkDynamicAopProxy`的`invoke`方法及拦截器链的工作机制。
摘要由CSDN通过智能技术生成

<!-- 另外写了两篇博客,一个是refresh()里面方法的基本介绍,另外一个是bean的实例化过程 -->

在介绍AOP之前,想必很多人都听说AOP是基于动态代理和反射来实现的,那么在看AOP之前,你需要确实弄懂动态代理和反射。

巧了,我这里就有。

JDK的动态代理的实现和源码分析,参见我的这两篇文章

JDK的动态代理源码分析之一   (   http://blog.csdn.net/weililansehudiefei/article/details/73655925  )

JDK的动态代理源码分析之二(  http://blog.csdn.net/weililansehudiefei/article/details/73656923 )


上面的两个看懂了,那么就可以来看本篇文章了。至于Java反射知道就行,但是更巧的是我博客里正好有一篇介绍Java反射的。

Java反射的实现和基本原理,参见我的这篇文章

Java反射机制 (http://blog.csdn.net/weililansehudiefei/article/details/70194940)


那么接下里进入AOP的环节。

AOP即面向切面编程,刚学AOP的时候,单是各种AOP的概念都搞的有点懵,什么切面,切点,通知,织入、连接点、目标对象。。。。AOP的原理都没看呢,这些词语的意思就已经上人不想看了。本人将在实现AOP的时候,讲解我理解的这些AOP的术语,对应的AOP的代码和动作。

本文将先先从代码实现AOP入手,然后分析AOP的底层代码及其原理。


后期会把所有的工程实现代码,放在我的GitHub上,到时候我会更新文章。


一、AOP的Demo

如果我们对象的继承关系看成纵向关系,就像一棵树,多个不同类的多个继承关系就相当于有一排的树。AOP的好处就在于,你想对这些树进行相同的操作,这个时候,不用纵向的为每个树定义操作方法,你只需要横向的一刀切,给他们给个共有的操作方法。


Spring的AOP是支持JDK的动态代理和Cglib的动态代理的。JDK的动态代理是针对接口的,而Cglib是针对类的。本文针对JDK的动态代理。

首先定义一个接口:起名字时候特意给这个接口名,带上了Interface,这样后面会更引人注意一些。接口很简单,里面一个抽象方法eat()

package com.weili.cn;

/**
 * Created by weili on 17/6/27.
 */
public interface AnimalInterface {
    public abstract void eat();
}



实现类:作为一个吃货,实现类里面当然得打印 chi  chi  chi。撑死我吧!!!

这个实现类里面,只有一个方法,这个方法就是AOP的切点。虽然切点这个概念本身并不一定是Method,但在Spring中,所有的切点都是Method。我们增强的是方法。

package com.weili.cn;

/**
 * Created by weili on 17/6/27.
 */
public class Animal implements AnimalInterface{

    public void eat() {
        System.out.println("Animal类中  chi  chi  chi");
    }
}



切面类,又称增强类。因为我们是要用这个类的方法,来给原先的切点方法增强。切面类中,我们要去执行的方法,称为通知。所谓织入通知,就是将切面类里面的方法,和切点的方法进行联系。

package com.weili.cn;

import org.aopalliance.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值