Spring IOC和AOP(图文全面详解)

Spring IOC和AOP(图文全面详解)-mikechen

Spring IOC和AOP是Spring 的两大核心,也是Java面试必考内容,下面我就来详解Spring IOC和AOP@mikechen

Spring IOC和AOP

Spring 是一个轻量级的Java 开发框架,Spring主要用来开发Java应用,Spring 可以被看作是一个大型工厂。

Spring IOC和AOP(图文全面详解)-mikechen

IOC和AOP是Spring框架的两个核心,通过控制反转Spring IOC和面向切面编程Spring AOP,来更好的实现Java应用层。

简单来说,Spring是一个轻量级的IOC控制反转和面向切面(AOP)的容器框架。

 

Spring IOC

Spring中,IOC容器是整个框架的核心,负责管理和维护应用程序中的所有Bean对象。

IOC是Inversion of Control的缩写,多数书籍翻译成IOC控制反转

IOC控制反转是一种设计思想,它使得对象之间的依赖关系发生了翻转,比如:传统的方式,程序员需要在代码中显式地创建对象并指定对象之间的关系。

如下图所示:

Spring IOC和AOP(图文全面详解)-mikechen

这种创建方式,对象的创建大家是耦合在一起的,不有利于后续的开发和维护。

如果采用IOC的方式,目的就是为了让依赖关系反转,反转后变成下图:

Spring IOC和AOP(图文全面详解)-mikechen

所有的对象依赖关系,就需要依靠IOC容器来驱动了,这样做的目的就是为解耦,可维护性就变强了。

而Spring IOC就是IOC容器的一种实现方式,Spring提供了两种类型的IOC容器:BeanFactory和ApplicationContext。

Spring IOC容器启动的过程可以分为以下几个步骤:

Spring IOC和AOP(图文全面详解)-mikechen

  1. 加载Bean的定义:Spring通过BeanDefinitionReader读取Bean的定义信息,Bean的定义信息可以通过XML、注解或者Java代码方式进行配置。
  2. 创建Bean的实例:Spring IOC容器使用反射机制创建Bean的实例。
  3. 设置Bean的属性:Spring IOC容器通过反射机制为Bean对象设置属性。
  4. 处理Bean的依赖关系:Spring IOC容器通过依赖注入机制处理Bean的依赖关系,将需要的依赖对象注入到Bean中。
  5. 初始化Bean:Spring IOC容器会调用Bean的初始化方法,进行一些初始化操作。
  6. 注册Bean的销毁方法:Spring IOC容器会注册Bean的销毁方法,以便在容器关闭时能够正确地销毁Bean对象。
  7. Bean可以使用:完成以上步骤之后,Bean对象就可以在应用程序中使用了。

 

Spring AOP

AOP,英文全称是Aspect Oriented Programming,翻译过来就是面向切面编程。

AOP是一种编程思想,它主要解决的是业务逻辑中的横切关注点问题,如日志记录、性能统计、安全控制等。

如下图所示:

Spring IOC和AOP(图文全面详解)-mikechen

AOP编程其实是很简单的事情,程序员只需要参与三个部分:

1、定义普通业务组件;

2、定义切入点,一个切入点可能横切多个业务组件;

3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作;

Spring AOP支持以下通知类型:

  1. 前置通知(Before Advice):在连接点之前执行的通知。
  2. 后置通知(After Advice):在连接点之后执行的通知,但是不能控制连接点的执行结果。
  3. 返回通知(After Returning Advice):在连接点执行完毕之后执行的通知,可以访问连接点的返回值。
  4. 异常通知(After Throwing Advice):在连接点抛出异常后执行的通知,可以访问连接点抛出的异常。
  5. 环绕通知(Around Advice):在连接点前后都执行的通知,可以控制连接点的执行。

Spring AOP的实现是基于动态代理技术和字节码增强技术,可以查看:Spring AOP全面详解(超级详细)

Spring AOP与Spring IoC容器紧密结合,通过IoC容器管理和创建AOP代理对象,从而实现对业务逻辑的增强。

以上就是Spring IOC和AOP详解,更多Spring内容请查看:Spring教程(史上最全图文详解)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法