最近挺忙的,又偷懒没更新了…

建议先看:https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/index.html

今天看到一篇关于spring原理的文章,是关于spring中ioc和aop具体实现的。

结果发现我已经完全忘掉spring这两大特性的原理了,赶紧复习一下。

一、spring ioc

spring ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。

  1. 资源集中管理,实现资源的可配置和易管理。
  2. 降低了使用资源双方的依赖程度,也就是我们说的耦合度。

明确一点,spring ioc很大程度上是根据java的反射特性来实现的。

至于反射,可以参照我以前的文章:

java 反射

我个人是这样理解的:我们把需要使用的类放进第三方容器中,需要用到了,就用反射把这个类加载出来(依赖注入di),使用类中的方法。整个这样的流程称为控制反转(ioc)。

二、spring aop

spring aop是面向切面,以前的文章中有提到为什么需要使用spring aop:

spring aop基础,为什么需要aop

首先明确一点,spring aop很大程度上是根据java的动态代理来实现的。

原来我们使用动态代理,需要写很多相关代码,并且要有比较深的了解,对开发人员的要求水平较高。现在spring帮我们包装了aop,只要设定运行时点,写逻辑就好,方便了很多。

spring aop的实现原理一般有两种,不详细展开讨论(参考:https://www.jianshu.com/p/010f9c0b3e2f):

  1. java原生实现。默认的策略是如果目标类是接口,则使用JDK动态代理技术(通过接口实现)。否则使用Cglib来生成代理(通过继承实现)。
  2. 借助Aspectj实现。采用静态织入的方式,引入特定的语法创建“切面”,从而使得编译器可以在编译期间织入有关“切面”的代码。

三、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注