首页 > 其他分享 >【Spring IoC&DI】路径扫描,DI依赖注入

【Spring IoC&DI】路径扫描,DI依赖注入

时间:2024-11-06 09:48:34浏览次数:3  
标签:构造方法 Autowired 对象 Spring DI 注解 IoC 注入

【路径扫描】

Spring注重路径,约定大于配置

例如,这个路径下,Spring默认会去扫描下【com.baiye.ioc】下面所有类中加了五大注解的路径,不在这个路径下是默认不会去扫描的

即:Spring默认的扫描路径是——启动类所在的目录及其子目录

但,当启动类放到Service包中时,扫描路径就变成了【com.baiye.ioc.Service】,那么我们的其他包(component,config等)就都扫描不到了

所以我们可以使用注解「@ComponentScan」来去定义扫描路径

这会很麻烦,所以我们一般默认把启动类放到最外层,不要放到包中

【DI依赖注入】

我们可以依靠“依赖注入”从IoC容器中以一种更方便的方式取对象,并注入给使用者

依赖注入共有三种方式

1.属性注入

2.构造方法注入

3.setter方法注入

【属性注入】

使用「@Autowired」注解

在这里,UserService这个对象交给了Spring进行管理,然后通过@Autowired注入给UserController这个使用方,这就是「属性注入」

【构造方法注入】

但需要注意的是,如果有了带参的构造方法,那么默认提供的无参构造方法就不存在了

但如果补充了无参构造方法,会报错

spring在帮我们管理对象时,它一般会走构造方法,而代码中有两个构造方法,它不知道使用哪个,因此它使用了默认的无参构造方法,这样一来UserService就为null值,报错了

因此我们可以给有参方法加上@Autowired注解来解决这个问题

当存在多个构造方法时,需要使用@Autowired指定默认的构造方法

如果只存在一个构造方法,@Autowired可以省略

值得一提的是,交给Spring管理的对象,如果有参数,这个参数可以自己指定

如果未指定,Spring会根据名称或类型,从容器中查找对象,并注入进来

【setter方法注入】

同理,也是要加上@Autowired,它不可省略

【三种注入优缺点】

此外,@Autowired在同种类型时,有多个名称的对象时,按照名称来注入

该类型只有一个对象时,直接注入

但如果这个类型有多个对象,且名称与已有的对象名称不符时,会报错

因此,我们可以使用「@Qualifier」注解

可以在该注解内部指定想要的对象名称

该注解也可以这么使用

此外,还有一种Spring自己提供的方式:使用「@Resource」注解

在name参数中写对象名称,可以调用对应类型的对象

【总结】

【SpringMVC和SpringBoot的理解】

Spring MVC和Spring Boot都属于Spring,Spring MVC是基于Spring的一个MVC框架,而Spring Boot是基于Spring的一套快速开发整合包

【常见注解和它们的作用】

web中url的映射:@RequestMapping

参数接收,接口响应:@RequestParam,@RequestBody,@ResponseBody

bean的存储:@Controller,@Service,@Repository,@Component,@Configuration,@Bean

bean的获取:@Autowired,@Qualifier,@Resource

【@Autowired和@Resource的区别】

1.@Autowired根据类型匹配,@Resource根据名称匹配

2.@Autowired是spring框架提供的注解,@Resource是jdk提供的注解

标签:构造方法,Autowired,对象,Spring,DI,注解,IoC,注入
From: https://blog.csdn.net/2301_81305165/article/details/143447656

相关文章

  • 【Spring IoC&DI】IoC容器,IoC注解,Bean的使用
    【Spring核心思想:IoC】spring是一个开源框架,支持广泛的应用场景,简而言之:Spring是包含了众多工具方法的IoC容器【IoC】IoC的意思是「控制反转」,也就是说Spring是一个“控制反转”的容器通用程序的实现代码,类的创建顺序是反的,如果想改tire需要连同之前的一起改,很麻烦改......
  • SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext
     SpringBoot的启动流程可以分为几个重要的步骤,其中之一是引导上下文(BootstrapContext)。引导上下文是在SpringBoot应用程序启动时创建的第一个Spring应用程序上下文,它负责加载和初始化SpringBoot的核心组件和配置。默认的引导上下文是通过DefaultBootstrapContext类来实现......
  • chaodiwang.py
    桓公少与殷侯齐名,常有竞心。桓问殷:“卿何如我?”殷云:“我与我周旋久,宁作我!”抄底王今天闲聊,聊到股票跌停要去抄底,风浪越大鱼越贵。剑走偏锋,是不是可以设计一个抄底选股策略,对这支股票的历史上大跌表现进行量化代码importdatetimeimportbaostockasbsimportpandasasp......
  • 第20章 SpringBoot上传文件
    在SpringBoot中实现文件上传仍然使用SpringMVC的MultipartFile类来处理。我们创建一个“SpringBootUploadDemo”的工程然后我们修改编码格式以及Maven仓库地址,我们省略这个过程了。接下来,我们修改“pom.xml”文件,添加SpringBoot和Web依赖,如下所示<?xmlversion="1.0......
  • 第21章 SpringBoot日志
    我们首先介绍一下开源日志框架。首先是commons-logging,是apache最早提供的日志框架。它的主要作用提供一个统一的日志接口,以便可以在不同的项目中使用不同的日志框架。common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志实现库(例如,jdk自带的logging库)。......
  • 数据库Redis篇
    系列文章目录第一章C/C++语言篇第二章计算机网络篇第三章操作系统篇第四章数据库MySQL篇第五章数据库Redis篇第六章场景题/算法题第七篇常见HR问题篇本系列专栏:点击进入后端开发面经关注走一波秋招阶段,面过很多大中小厂,积攒了很多面经,都是高频问题!!!前言:本系......
  • 如何快速搭建一个spring boot项目
    一、准备工作1.1 安装JDK:确保计算机上已安装JavaDevelopmentKit(JDK)8或更高版本、并配置了环境变量1.2 安装Maven:下载并安装Maven构建工具,这是SpringBoot官方推荐的构建工具。1.3安装代码编辑器:这里推荐使用IntelliJIDEA二、使用SpringInitializr创建项目2.1 ......
  • 闯关leetcode——3289. The Two Sneaky Numbers of Digitville
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/the-two-sneaky-numbers-of-digitville/description/内容InthetownofDigitville,therewasalistofnumberscallednumscontainingintegersfrom0ton-1.Eachnumberwassu......
  • springboot关爱老人App-计算机毕业设计源码32708
    目 录摘要1绪论1.1开发背景和意义1.2开发技术1.2.1Android开发工具1.2.2Springboot框架1.2.3MySQL数据库1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1用户注册流程2.2.2用户登录流程2.2.3数据删除流程2.3系......