Spring IOC和AOP是Spring 的两大核心,也是Java面试必考内容,下面我就来详解Spring IOC和AOP@mikechen
Spring IOC和AOP
Spring 是一个轻量级的Java 开发框架,Spring主要用来开发Java应用,Spring 可以被看作是一个大型工厂。
IOC和AOP是Spring框架的两个核心,通过控制反转Spring IOC和面向切面编程Spring AOP,来更好的实现Java应用层。
简单来说,Spring是一个轻量级的IOC控制反转和面向切面(AOP)的容器框架。
Spring IOC
在Spring中,IOC容器是整个框架的核心,负责管理和维护应用程序中的所有Bean对象。
IOC是Inversion of Control的缩写,多数书籍翻译成IOC控制反转。
IOC控制反转是一种设计思想,它使得对象之间的依赖关系发生了翻转,比如:传统的方式,程序员需要在代码中显式地创建对象并指定对象之间的关系。
如下图所示:
这种创建方式,对象的创建大家是耦合在一起的,不有利于后续的开发和维护。
如果采用IOC的方式,目的就是为了让依赖关系反转,反转后变成下图:
所有的对象依赖关系,就需要依靠IOC容器来驱动了,这样做的目的就是为解耦,可维护性就变强了。
而Spring IOC就是IOC容器的一种实现方式,Spring提供了两种类型的IOC容器:BeanFactory和ApplicationContext。
Spring IOC容器启动的过程可以分为以下几个步骤:
- 加载Bean的定义:Spring通过BeanDefinitionReader读取Bean的定义信息,Bean的定义信息可以通过XML、注解或者Java代码方式进行配置。
- 创建Bean的实例:Spring IOC容器使用反射机制创建Bean的实例。
- 设置Bean的属性:Spring IOC容器通过反射机制为Bean对象设置属性。
- 处理Bean的依赖关系:Spring IOC容器通过依赖注入机制处理Bean的依赖关系,将需要的依赖对象注入到Bean中。
- 初始化Bean:Spring IOC容器会调用Bean的初始化方法,进行一些初始化操作。
- 注册Bean的销毁方法:Spring IOC容器会注册Bean的销毁方法,以便在容器关闭时能够正确地销毁Bean对象。
- Bean可以使用:完成以上步骤之后,Bean对象就可以在应用程序中使用了。
Spring AOP
AOP,英文全称是Aspect Oriented Programming,翻译过来就是面向切面编程。
AOP是一种编程思想,它主要解决的是业务逻辑中的横切关注点问题,如日志记录、性能统计、安全控制等。
如下图所示:
AOP编程其实是很简单的事情,程序员只需要参与三个部分:
1、定义普通业务组件;
2、定义切入点,一个切入点可能横切多个业务组件;
3、定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作;
Spring AOP支持以下通知类型:
- 前置通知(Before Advice):在连接点之前执行的通知。
- 后置通知(After Advice):在连接点之后执行的通知,但是不能控制连接点的执行结果。
- 返回通知(After Returning Advice):在连接点执行完毕之后执行的通知,可以访问连接点的返回值。
- 异常通知(After Throwing Advice):在连接点抛出异常后执行的通知,可以访问连接点抛出的异常。
- 环绕通知(Around Advice):在连接点前后都执行的通知,可以控制连接点的执行。
Spring AOP的实现是基于动态代理技术和字节码增强技术,可以查看:Spring AOP全面详解(超级详细)
Spring AOP与Spring IoC容器紧密结合,通过IoC容器管理和创建AOP代理对象,从而实现对业务逻辑的增强。
以上就是Spring IOC和AOP详解,更多Spring内容请查看:Spring教程(史上最全图文详解)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》