Spring学习-IOC

spring标准的配置文件:

  • 根标签是beans
  • beans后面的是约束文件声明
  • beans里面是bean声明
  • 什么是bean:bean就是java对象,spring容器管理的java对象,叫做bean。

spring创建对象,调用类的哪个方法?

默认调用的是类的无参构造方法。

spring在何时创建对象?

创建spring容器对象的时候,会读取配置文件, 创建文件中声明的java对象。
优点:
获取对象的速度快,因为对象已经创建好了。
缺点:
占用内存。

spring容器创建对象,一次创建几个?

在创建容器对象时,会把配置文件中的所有对象都创建出来(spring的默认规则)。

spring容器创建对象的特点

  1. 容器对象ApplicationContext:接口
    通过ApplicationContext对象,获取要使用的其他java对象,执行getBean(“的id”)
  2. spring默认是调用类的无参数构造方法,创建对象。
  3. spring读取配置文件, 一次创建好所有的java对象,都放到map中。

IOC控制反转

IOC概念

IOC,inversion of Control:控制反转,是一个理论,一个指导思想。指导开发人员如何使用对象的。
	把对象的创建,属性赋值,对象的生命周期都交给代码之外的**容器**管理。
  • ioc分为控制和反转
    控制:对象创建,属性赋值,对象生命周期管理。
    反转:把开发人员管理对象的权限转移给了代码之外的容器实现。由容器完成对象的创建。
    正转:开发人员在代码中,使用new构造方法创建对象。开发人员掌握了对象的创建,属性赋值,对象从开始到销毁的全部过程。开发人员有对对象全部控制。

通过容器,可以使用容器中的对象(容器已经创建了对象,对象属性赋值了,对象也组装好了)。
Spring就是一个容器,可以创建对象,管理对象,给对象属性赋值。

  • IOC的技术实现
    DI(依赖注入):Dependency Injection,缩写DI,是IOC的一种技术实现。程序只需要提供要使用的对象的名称叫可以了,对象如何创建,如何从容器中查找,获取都是由容器内部自己实现。

DI:给属性赋值。

spring调用类的无参数构造方法,创建对象。对象创建后给属性赋值。
给属性赋值的方式:

  • XML配置文件中的标签和属性;
  • 使用注解。
    DI分类:
  • set注入,也叫做设值注入;
  • 构造注入。

基于XML的DI

在xml配置文件中使用标签和属性,完成对象创建,属性赋值。

  • set注入,也叫做设值注入
    概念:spring调用类中的set方法,在set方法中可以完成属性赋值。推荐使用。
    与属性名无关,看的是set方法。

  • 构造注入,使用name属性
    Spring学习-IOC

  • 构造注入,使用index
    Spring学习-IOC

  • 构造注入,省略index
    Spring学习-IOC

  • 引用类型的自动注入
    概念:spring可以根据某些规则给引用类型完成赋值。只对引用类型有效。(byName byType)

  • byName(按名称注入):java类中引用类型属性名称和spring容器中bean的id名称一样的,且数据类型也是一样的,这些bean能够赋值给引用类型。
    Spring学习-IOC

  • byType(按类型注入):java类中引用类型的数据类型和spring容器中的bean的class值是同源关系的,这样的bean赋值给引用类型。⚠️在xml配置文件中,符合条件的对象,只能有一个,多余一个会报错。
    Spring学习-IOC

基于注解的DI

  1. 创建对象的注解
    @Component
    @Controller
    @Service
    @Repository
  2. 简单类型属性赋值
    @value
  3. 引用类型属性赋值
    @Autowired:Spring提供的注解,支持byName,byType
    @Autowired:默认就是byType
    @Autowired+@Qualifier:使用byName
    @Resource:来自jdk中(只在jdk8中存在,高于jdk8的版本需要加依赖引入)的注解给引用类型赋值,默认是byName。
    @Resource:先使用byName,再使用byType
    @Resource(name=“bean的名称”):只使用byName注入

IOC总结

IOC:管理对象的,把对象放在容器中,创建 赋值 管理依赖关系。
IOC:通过管理对象,实现解耦合。 ioc解决处理业务逻辑对象之间的耦合关系,也就是service和dao之间的耦合。

spring作为容器适合管理哪些对象?

1.service对象,dao对象
2.工具类对象

不适合交给spring管理的对象:
1.实体类
2.servlet,listener,filter等web中的对象,他们是tomcat创建和管理的。

上一篇:NET Core DI 手动获取注入对象


下一篇:0经验普本,原来靠提升效率也能进大厂