首页 > 其他分享 >Spring IoC

Spring IoC

时间:2023-10-06 18:55:38浏览次数:25  
标签:容器 依赖 Spring Bean 组件 IoC

引言

要明白 Spring IoC 容器的作用,就必须先弄明白 IoC(控制反转) 和 DI(依赖注入) 这两个概念。

IoC 概念

IoC(控制反转)就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。控制权转移带来的好处就是降低了业务对象之间的依赖程度(低耦合、高内聚)。

这里所说的外部容器指的就是 Spring IoC 容器,IoC 控制反转就是由 IoC 容器负责实例化对象,也就是说有了 IoC 容器就不用自己 new 对象了啦。

DI 概念

DI(Dependency Injection,依赖注入)可以向某个对象动态的注入它所依赖的其他对象的引用。

有了 DI(依赖注入),IoC 容器就可以把实例化的对象注入给应用本身,这样开发者就可以不用自己去 new 对象以及建立对象之间的依赖关系,只需要使用对象就可以了。

依赖注入的方式:

  • 构造器注入

  • 方法注入

  • 接口注入

Spring IoC 容器支持构造器注入和方法注入

从上图可以看到,通过使用 Spring IoC 容器可以达到三层架构降低耦合度的效果,让三层之间不存在依赖之间,它们都依赖于 IoC 容器。

Spring IoC 容器

Spring IoC 容器是指实现 IoC (控制反转)和 DI(依赖注入)概念的一个 Spring 组件,开发者使用 IoC 容器可以获得 IoC/DI 带来的降低耦合度和简化开发的特性。

  • Bean

Spring 中使用 Bean 来表示应用组件,一个 Bean 组件可以是任何形式的简单 Java 类实例,Spring 中使用 IoC 容器来管理 Bean 的生命周期(Bean 的创建和销毁)

  • BeanFactory(Bean 工厂)

BeanFactory 是 Spring 框架最核心的接口,它提供了高级 IoC 的配置机制;BeanFactory 使管理不同类型的 Java 对象成为可能。
BeanFactory 是 Spring 框架的基础设施,属于底层封装组件,专供 Spring 框架内部使用

  • ApplicationContext ( 应用上下文 )

ApplicationContex 是建立在 BeanFactory 基础之上,提供了更多面向应用的功能。一般称BeanFactory为IoC容器,而称ApplicationContext 为应用上下文。ApplicationContext 面向 Spring 框架的开发者,属于上层封装组件,专供开发者使用。通过 ApplicationContext 应用上下文实例调用其 getBean() 方法从 IoC 容器中即可获取 Bean 对象实例

启动 IoC 容器

Spring 有三种启动 IoC 容器的方式,如下:

  • ClassPathXmlApplicationContext(相对路径)

从类路径下的 XML 配置文件中加载上下文定义,把应用上下文定义文件当做类资源

复制代码
ApplicationContext ctx = new ClassPathXmlApplicationContext(“包路径/beans.xml”)

  • FileSystemXmlApplicationContext(绝对路径)

读取文件系统下的 XML 配置文件并加载上下文定义

复制代码
ApplicationContext ctx = new FileSystemtXmlApplicationContext(“文件路径/beans.xml”)
  • XmlWebApplicationContext(web 配置路径)
    读取 Web 应用下的 XML 配置文件并加载上下文定义

装配 Bean

装配 Bean 是指在 Spring IoC 容器中创建 Bean 组件和建立 Bean 组件之间的依赖关系的过程,即实现 IoC(控制反转)和 DI(依赖注入)。
Spring 支持三种装配 Bean 的方式:

  • 基于 XML 配置装配 Bean

  • 基于注解装配 Bean

  • 基于 Java 类装配 Bean

注解装配 Bean

开启注解
复制代码
<!--Spring IoC 容器需要在 Spring 配置中开启注解(默认禁用注解)-->
<context:annotation-config />
<!--Spring IoC 容器需要自动检测 Bean(扫描 Java 类中 Bean 组件) -->
<context:component-scan packages=“包路径”/>
IoC 注解
  • @Component:标识 Java 类为 Spring Bean 组件(通用注解)

  • @Controller:标识三层架构中表现层的 Java 类为 Spring Bean 组件

  • @Service:标识三层架构中业务逻辑层的 Java 类为 Spring Bean 组件

  • @Repository:标识三层架构中业务持久层的 Java 类为 Spring Bean 组件

DI 注解
  • @Autowired:依赖注入

  • @Resource:使用与 @Autowired 注解相同

  • @Qualifer:明确指定需要自动装配的 Bean 组件

总结

Spring IoC 容器的作用就是实现了 IoC(控制反转)和 DI(依赖注入),对于已经在容器里面的则使用依赖注入,例如@Autowired、@Resourse等。如果没有在容器里面则需要使用@Component等注解来放进IOC容器。

标签:容器,依赖,Spring,Bean,组件,IoC
From: https://www.cnblogs.com/mystarry/p/17744841.html

相关文章

  • SpringBoot整合mybatisplus总结
      最近学习了一些springboot的知识后,开始了对于mybatis的学习,在运用这个框架方面,我选择跟随网上的资料进行整合,遇到了一些问题,并通过自己的查阅资料以及探索,解决了问题。下面概括一下mybatisplus框架的作用,以及应用,并对我学习时遇到的一些问题进行说明。  MyBatis-Plus(简......
  • 4. spring完全注解开发,独立配置,不使用xml
    user类: 转换结果: 注入参数还是上一篇所说的方法  支持最低版本spring4.1运行方法要有所改变:原来的://获取配置文件ApplicationContextcontext=newClassPathXmlApplicationContext("application.xml");//配置文件自动扫描z......
  • springboot中的代码生成器
    springboot可以集成MyBatis-Plus代码生成器,如何想要快速开发或者考试可以试用一下。我参看下面这篇博客弄的:Mybatis-Plus自动生成代码,自定义Controller_mybatisplus生成controller-CSDN博客有些好用 ......
  • SpringBoot
    1什么是springboot?用来简化spring应用的初始搭建以及开发过程使用特定的方式来进行配置(properties或yml文件)创建独立的spring引用程序main方法运行嵌入的Tomcat无需部署war文件简化maven配置自动配置spring添加对应功能starter自动化配置springboot来简化spring应用开......
  • Spring Boot请求响应:实战指南
    今天主要围绕着:请求、响应进行,主要包含两部分:请求响应1.请求我们主要讲解,如何接收页面传递过来的请求数据。1.1Postman之前我们课程中有提到当前最为主流的开发模式:前后端分离网站工作流程介绍在这种模式下,前端技术人员基于"接口文档",开发前端程序;后端技术人员也基于"接口文档",......
  • Spring Boot请求响应:实战指南
    今天主要围绕着:请求、响应进行,主要包含两部分:请求响应1.请求我们主要讲解,如何接收页面传递过来的请求数据。1.1Postman之前我们课程中有提到当前最为主流的开发模式:前后端分离网站工作流程介绍在这种模式下,前端技术人员基于"接口文档",开发前端程序;后端技术人员也基于"接口文档",......
  • 3. SpringMVC-使用注解开发-beans
    万能开头:<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.spring......
  • SpringMVC 数据校验
    SpringMVC数据校验应用程序在执行业务逻辑前,必须通过数据校验保证接收的输入数据时正确合法的.在一般情况下,应用程序的开发是分层的,不同层的代码由不同开发人员负责。很多时候,同样的数据校验会出现在不同层中,这样会导致代码冗余,为了避免这样的情况,最好是将验证逻辑和相应的域......
  • SpringMVC 拦截器
    SpringMVC拦截器<!--配置拦截器,可定义多个拦截器--><mvc:interceptors><!--定义1个拦截器--><mvc:interceptor><!--用于指定拦截器匹配url--><mvc:mappingpath="/user/**"/><!--用于指定拦截器排除的url-->&......
  • SpringMVC 文件上传
    SpringMVC文件上传<!--支持文件上传--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--maxUploadSizePerFile:单个文件大小限制maxUploadSize:整个请求大小限制--><propert......