当前位置: 首页 > article >正文

SpringIOCDI

1.IOC

1.1.IOC概述
  • IOC: Inversion Of Control,简称IOC,也被称为控制反转。对象的创建权由程序员主动创建转移到容器,由容器创建、管理对象,这种思想称为控制反转。这个容器称为IOC容器或Spring容器
  • 被IOC容器创建、管理的对象称为Bean对象
  • IOC在上面图中对应的就是创建对象放入到容器中
1.2.IOC注解
  • 想要在程序启动时将对象交由IOC帮我们创建并放入到容器中,那么我们需要告诉IOC哪些类需要交给它创建并管理,此时就需要在类上打上对应的注解

注解

说明

位置

@Controller

@Component衍生注解,表示使用在控制器类上

标注在控制器类上

@Service

@Component衍生注解,表示使用在业务类上

标注在业务类上

@Repository

@Component衍生注解,表示使用在数据访问类上

标注在数据访问类上,使用MyBatis框架后不再使用

@Component

声明bean的基础注解

不属于以上三类时,使用此注解

2.DI

2.1.DI概述
  • DI:Dependency Injection,简称DI,也被称为依赖注入。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入
  • DI在上面图中对应的就是从容器中找到对象并注入给声明的IStudentService对象
2.2.DI注解
  • 想要在IOC将对象创建完成后将Bean对象注入到我们声明的对象中时,需要使用到Spring提供的@Autowired注入注解打到声明对象上就可以实现从容器中自动获取对应实例进行注入

注解

说明

位置

@Autowired

依赖注入注解

标注在需要依赖注入的对象上

3.注解常用参数

value属性

在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字

CompentScan自定义扫描

@Scope注解

作用域

说明

singleton

单例作用域,Bean对象默认作用域

prototype

多例作用域,每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例

request

请求作用域,只适用于SpringMVC框架,了解

session

会话作用域,只适用于SpringMVC框架,了解

application

全局作用域,只适用于SpringMVC框架,了解

  • proxyMode属性:表示IOC容器要不要为Bean创建代理,如何创建代理,是使用JDK的动态代理还是使用CGLIB
    • DEFAULT:不为Bean创建代理对象,默认值
    • NO:不为Bean创建代理对象
    • INTERFACES:使用JDK动态代理为Bean创建代理对象
    • TARGET_CLASS:使用CGLIB为Bean创建代理对象

@Lazy注解
  • @Lazy注解可以作用在类上,或者方法上,表示Bean对象开启懒加载
  • 注意:使用@Lazy的前提是要操作的Bean要使用默认的单例模式,多例Bean无法开启懒加载,因为多例Bean本身就是使用时才创建
  • value属性:指定是否开启懒加载
    • true:开启懒加载,默认值
    • false:关闭懒加载

4.依赖注入

属性注入

setter注入

构造器注入

5.多同类型Bean注入

@Primary
  • @Primary:当存在多个相同类型的Bean注入时,在要使用的类上加上@Primary注解,来确定默认的实现
  • 在StudentAServiceImpl类上加上@Primary

@Qualifier
  • @Qualifier注解:指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称
  • @Qualifier注解不能单独使用,必须配合@Autowired使用

@Resource
  • @Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称


http://www.kler.cn/a/326787.html

相关文章:

  • OpenCV学习——图像融合
  • Confluent Cloud Kafka 可观测性最佳实践
  • Docker 设置代理的三种方法(2024年12月19日亲自测试)
  • OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训
  • http协议的状态码
  • 【蓝桥杯——物联网设计与开发】基础模块8 - RTC
  • CaChe的基本原理
  • ECMAScript标准的详细解析
  • sql-labs:42~65
  • AIGC对网络安全的影响
  • ansible之playbook\shell\script模块远程自动安装nginx
  • Python 时间占位符:毫秒的使用
  • TDengine 签约国家电投旗下四大火力发电厂,助力汽轮机振动数据的有效管理
  • 大模型增量训练--基于transformer制作一个大模型聊天机器人
  • 使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤
  • 【CSS in Depth 2 精译_040】6.3 CSS 定位技术之:相对定位(下)—— 用纯 CSS 绘制一个三角形
  • 使用激光定高需要注意的问题以及效果测试与读取
  • 栈:只允许在一端进行插入或删除操作的线性表
  • 王道-计网
  • HTML讲解(三)通用部分
  • 音频编码:PCM【无损音频】
  • 如何保证Redis与数据库的数据一致性
  • 《程序猿之Redis缓存实战 · 字符串类型》
  • 浅谈网络通信中的透传和非透传
  • 01---java面试八股文——springboot---10题
  • rsync+inotify