发布于 

Spring深入学习-IOC容器

Spring深入学习-IOC容器

Spring的基本概念

1.Spring是轻量级的开源的JavaEE框架,目的是解决企业应用开发的复杂性

轻量级 -> Jar包及体积都很小,可独立使用

开源 -> 免费提供源代码

核心的组成部分IOC AOP

IOC 控制反转

把创建对象的任务由原来的程序员编写,转化为交给Spring去管理创建

概念

控制反转,将对象创建与对象之间的调用过程,交给Spring去处理,降低代码之间的耦合度

IOC底层原理

  1. XML解析:得到配置文件的全类名
  2. 工厂模式
  3. 反射:根据全类名,使用反射创建对象

IOC接口(BeanFactory)

IOC容器中的基本实现,Spring中内部使用的接口,一般不建议在开发中使用。在加载配置文件时候不会创建对象,在获取对象使用时才会创建对象。

IOC接口(ApplicationContext)

BeanFactory的子接口,提供了更多更强大的功能,面向开发人员提供。在加载配置文件的时候,就会将配置文件中的对象创建。由于目前较多的都是Web服务,倾向于在服务器启动时就完成资源的创建,降低用户使用服务的等待时间

实现类
  • ClassPathXmlApplicationContext:传入参数为src下的类路径
  • FileSystemXmlApplicationContext:传入参数为绝对路径

IOCBean管理(基于XML)

注入属性的方式有以下几种

  • 基于proprity标签进行注入
  • 使用有参构造constructor-arg方式进行注入
  • 使用p名称空间注入,可简化XML配置(实际中使用的不多)

Bean(FactoryBean)

Spring中有两种类型的Bean,用户创建的为普通bean,另一种为工厂bean(Factory bean)

  • 普通bean:定义类型即为返回类型
  • 工厂bean:在配置文件中定义的类型可以与返回类型不同

Bean的作用域

bean在默认的情况下是一个单例对象,可通过设置将其设置为一个多例对象

Bean的生命周期

从对象创建到销毁的过程就称为一个生命周期

  1. 通过构造器创建Bean的实例(构造器)
  2. 为Bean的属性设置值,和对其他bean的引用(调用Set方法)
  3. 调用Bean的初始化方法(需要进行配置)
  4. Bean可以使用了(对象获取到了)
  5. 当容器关闭的时候,调用bean销毁的方法(需要配置销毁的方法)

加上后置处理器后,生命周期变为7步,通过创建类,实现BeanPostProcessor接口,并在XML方法中配置后,Spring会将其作为所有bean的后置处理器

  1. 通过构造器创建Bean的实例(构造器)
  2. 为Bean的属性设置值,和对其他bean的引用(调用Set方法)
  3. 调用后置处理器的postProcessBeforeInitlization方法
  4. 调用Bean的初始化方法(需要进行配置)
  5. 调用后置处理器的postProcessAfterInitlization方法
  6. Bean可以使用了(对象获取到了)
  7. 当容器关闭的时候,调用bean销毁的方法(需要配置销毁的方法)

Bean自动装配(XML)实际中用的很少

根据指定的规则(属性名称或者属性类型),Spring自动将匹配的属性值进行注入

  • 根据属性名称的自动装配(byName),注入属性的id值需要与声明的参数值相同
  • 根据属性类型的自动装配(byType),当同类型bean存在两个及以上时,无法确定根据那个实现自动注入

Bean相关的注解

创建对象的相关注解(实际中是可以混用的)

  1. @Component:
  2. @Service:用在业务层
  3. @Controller:用在控制层
  4. @Repository:一般用于DAO层或者持久层上

上面四个注解的功能是一样的,都能用于创建对象

1.基于注解方式实现对象创建

  1. 在使用注解的时候需要引入AOP的依赖
  2. 开启组件扫描(XML文件中Component-scan配置)
  3. 在类上添加注解,使Spring能够将其作为组件进行创建

指定只扫描特殊类的注解(能够看懂即可)

  1. use-default-filters属性设置为false后再通过include-filter标签执行扫描那些注解
  2. 通过exclude-filter标签标记不扫描那些注解

2.基于注解方式实现属性注入

针对对象类型注入(不需要添加Set方法)

  1. @AutoWired:根据属性类型进行自动注入
  2. @Qualifer:根据属性名称进行自动注入(需要与@AutoWired一起使用)
  3. Resourece:可以根据类型,也可以根据名称注入

针对普通类型进行注入

  1. @Value 给普通数据类型注入的注解

3.完全注解开发(通常在SpringBoot中使用)

  1. 创建SpringConfig类,作为配置类,在类名上增加@Configuration注解,告诉Spring此类为配置类,用其替代XML配置文件

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @John Doe 创建,使用 Stellar 作为主题。