njustwh2014 / MySpring

徒手撸代码: 实现Spring IOC和Spring AOP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MySpring

徒手撸代码: 实现Spring IOC和Spring AOP

Spring IOC

IOC(依赖注入、控制反转)的作用

实现代码间解耦。。。。。。。。。。。。。。。

参考链接: https://www.jianshu.com/p/f56926a34977

用一个类比来理解这个问题。Ioc 框架就是我们生活中的房屋中介,首先中介会收集市场上的房源,分别和各个房源的房东建立联系。当我们需要租房的时候,并不需要我们四处寻找各类租房信息。我们直接找房屋中介,中介就会根据你的需求提供相应的房屋信息。大大提升了租房的效率,减少了你与各类房东之间的沟通次数。

spring ioc 步骤:

  • 初始化 IoC 容器。
  • 读取配置文件。
  • 将配置文件转换为容器识别对的数据结构(这个数据结构在Spring中叫做 BeanDefinition)
  • 利用数据结构依次实例化相应的对象
  • 注入对象之间的依赖关系

Spring AOP

link: https://www.jianshu.com/p/f929d5d33592

AOP是什么?

面向切面的程序设计(aspect-oriented programming,AOP)。 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

为什么使用AOP?

面向切面编程,实际上就是通过预编译或者动态代理技术在不修改源代码的情况下给原来的程序统一添加功能的一种技术。 我们看几个关键词,第一个是“动态代理技术”,这个就是Spring Aop实现底层技术。第二个“不修改源代码”,这个就是Aop最关键的地方,也就是我们平时所说的非入侵性。。第三个“添加功能”,不改变原有的源代码,为程序添加功能。

举个例子:如果某天你需要统计若干方法的执行时间,如果不是用Aop技术,你要做的就是为每一个方法开始的时候获取一个开始时间,在方法结束的时候获取结束时间。二者之差就是方法的执行时间。如果对每一个需要统计的方法都做如上的操作,那代码简直就是灾难。如果我们使用Aop技术,在不修改代码的情况下,添加一个统计方法执行时间的切面。代码就变得十分优雅。具体这个切面怎么实现?看完下面的文章你一定就会知道。

Spring AOP实现步骤

  • 初始化 Aop 容器。
  • 读取配置文件。
  • 将配置文件装换为 Aop 能够识别的数据结构 -- Advisor。这里展开讲一讲这个advisor。Advisor对象中包又含了两个重要的数据结构,一个是 Advice,一个是 Pointcut。Advice的作用就是描述一个切面的行为,pointcut描述的是切面的位置。两个数据结的组合就是”在哪里,干什么“。这样 Advisor 就包含了”在哪里干什么“的信息,就能够全面的描述切面了。
  • Spring 将这个 Advisor 转换成自己能够识别的数据结构 -- AdvicedSupport。Spirng 动态的将这些方法拦截器织入到对应的方法。
  • 生成动态代理代理。
  • 提供调用,在使用的时候,调用方调用的就是代理方法。也就是已经织入了增强方法的方法。

About

徒手撸代码: 实现Spring IOC和Spring AOP


Languages

Language:Java 100.0%