Spring(一):基础学习之IOC

Spring Ioc与AOP相关知识总结

1. 什么是 Spring 框架?

Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。

核心模块:(项目中会使用到)
Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。(核心容器)主要提供 IoC 依赖注入功能。
Spring Aspects : 该模块为与AspectJ的集成提供支持。
Spring AOP :提供了面向切面的编程实现。
Spring JDBC : Java数据库连接。
Spring JMS :Java消息服务。
Spring ORM : 用于支持Hibernate等ORM工具。
Spring Web : 为创建Web应用程序提供支持。
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

2. 谈谈自己对于 Spring IoC 的理解

IoC

Ioc(Inverse of Control):控制反转,是一种设计思想,用于实现对象之间解耦。
在spring中,对象的创建由Ioc容器接管,同时对象的依赖关系也有Ioc容器来控制(依赖注入【DI】)。
减低对象之间的耦合的好处在于:代码易于扩展,不会出现牵一发动全身的现象;同时IOC容器,管理对象创建与对象依赖关系(依赖注入DI)好处在于:程序开发中,不需要再花费过多的精力去new一个又一个对象,同时完成其对象的注入,而是关注于对象本身和业务逻辑。

SpringIoc初始化过程(个人认为,当前阶段没必要太过于执着于源码,了解其设计思想,实现流程以及流程中关键类与方法即可)。

设计思想:工厂模式
过程:
javaBean的创建过程
描述:==Spring应用上下文(ApplicationContext)扫描解析所有配置资源(包括Xml配置以及class文件),通过映射来获取XML配置的相关类,或者注解(@Component)标注的类,然后在将这些类解析为BeanDefinition (Definition:翻译过来就是定义的意思),并将其注入BeanDefinationMap这样的一个Map中(实际情况并不如此,又些许差异);最后将其注册到BeanFactory,在Bean工厂中还有一系列的后置器,完成一些后续操作,至此Ioc容器创建bean的流程大致如此,==至于其中关于javabean单例模式的实现与自动装配(DI)以及很多注册器,不是你关注的重点,后续学习可以继续了解(AutowireCapableBeanFactory和SingletonBeanRegistry等)。

注:(1)BeanDefinition是一个模板类(bean的顶级接口:决定javaBean长什么样子),规定了一些诸如类的加载方式,属性,依赖关系,是否需要调用初始化方法、销毁方法等。

有兴趣的可以根据以下类图详细学习Ioc容器的具体机制以及相关原理:(后期学习)

beanFactory依赖关系

重点说下下面三个类的大致作用:

  • ListableBeanFactory:该接口定义了访问容器中 Bean 基本信息的若干方法,如查看Bean 的个数、获取某一类型 Bean 的配置名、查看容器中是否包括某一 Bean 等方法;(简单理解就是预防javabean的重复注册)
  • HierarchicalBeanFactory:父子级联 IoC 容器的接口,子容器可以通过接口方法访问父容器; 通过HierarchicalBeanFactory 接口: Spring 的 IoC 容器可以建立父子层级关联的容器体系,子容器可以访问父容器中的 Bean,但父容器不能访问子容器的 Bean。Spring 使用父子容器实现了很多功能,比如在 Spring MVC 中,展现层 Bean 位于一个子容器中,而业务层和持久层的 Bean 位于父容器中。这样,展现层 Bean 就可以引用业务层和持久层的 Bean,而业务层和持久层的 Bean 则看不到展现层的 Bean。(可以理解为定义bean之间的依赖关系

注:Hierarchical [ˌhaɪəˈrɑːkɪkl] :层次结构

  • ConfigurableBeanFactory:是一个重要的接口,增强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容器初始化后置处理器等方法;(Spring的定制开发关键类)

额外扩展

spring进行定制化功能扩展

常见的javabean相关的PostProcessor(后置器)
在这里插入图片描述

重点描述下上述后置器的三种项目中可能用到的

  1. BeanFactoryPostProcessor
    beanFactory后置处理器,支持在bean factory标准初始化完成后,对bean factory进行一些额外处理。在讲context初始化流程时介绍过,这时所有的bean的描述信息已经加载完毕,但是还没有进行bean初始化。例如PropertyPlaceholderConfigurer,就是在这个扩展点上对bean属性中的占位符进行替换。
  2. BeanDefinitionRegistryPostProcessor
    扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。例如可以在这里根据bean的scope创建一个新的代理bean。
  3. BeanPostProcessor
    提供了在bean初始化之前和之后插入自定义逻辑的能力。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean进行处理。

总结:

自己理解:

  • springIOC容器其实是工厂模式的一种体现。在笼统地讲下,就是资源与资源之间有内在/外在联系,但是资源的整合却不由资源本身自己完成,而是交给与之不相干的第三方来完成。这样降低了资源之间的耦合性(降低了资源之间的依赖程度),同时也实现了资源的统一管理。
  • 举例说明:做一盘蛋炒饭,你首先需要调料,饭,鸡蛋等资源;IOC容器现在就是一台做蛋炒饭的机器,平时调料,饭,鸡蛋等资源都会放在冰箱里,互不联系(此状态下无耦合);当需要做蛋炒饭时,这台机器工作,调料,饭,鸡蛋等资源才会产生联系;那么平日里我们只需要保证调料,饭,鸡蛋等资源(量是否充足)即可,并不需要维护调料,饭,鸡蛋等资源之间的关系(即关注于资源本身而非资源间的联系)。

道友们,如果觉得有所帮助,点个赞再走呗!

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章