1、为什么使用DI(依赖注入)

作用:给创建好的对象中的全局的属性或者对象进行赋值的操作

2、利用DI进行解决

1. 英文全称(Dependency Injection)

2. 中文名称:依赖注入

2.1 依赖:一个类在另一个类中作为全局属性时

2.2 注入:通过外部给自己属性(或其他内容)进行赋值

3. 类与类之间的关系:

3.1 继承(官方名称:泛化)

3.2 实现

3.3 依赖:类和类之间的关系是偶然的,临时的.在代码层面另一个类当作这个类的方法参数或局部变量

3.4 关联:类与类之间存在一定联系,可以是单向联系可以是双向联系.例如:学生和老师. (平时理解关联是一种强依赖),体现在代码层面,另一个类是这个类的全局属性.

3.5 聚合:类与类之间是可以单独存在的.但是有存在整体和部分的关系.例如:机箱和CPU.体现在代码层面:另一个类是这个类的全局属性.

3.6 组合:类与类之间是整体和部分之间的部分,不可分.例如人和心脏.体现在代码层面:另一个类是这个类的全局属性.

3.7 关系强度: 组合 > 聚合 > 关联 > 依赖

4. DI的意义

解除类与类之间高耦合性.

5. 为什么称DI和IoC是同一个事情.

Spring帮助创建对象的过程叫做IoC,创建对象时给对象中全局对象赋值叫做DI,所以认为IoC和DI是同一个事情.

3.DI注入的方式

A、设值注入:使用setter方法(常用)

结合<property>标签进行实现

//Clazz.java类:

applicationContext.xml中写入:

<?xml version="1.0" encoding="UTF-8"?>

测试类:

import 

测试结果

B、构造注入

提供有参构造方法,通过<bean>的<constructor-arg>注入

<?xml version="1.0" encoding="UTF-8"?>

C、自动注入

通过<bean>的autowire属性控制类中属性自动注入方式

<!-- 注意id名称一般与类中属性名一致 -->

autowire可取值:

1、 no: 不自动注入

2、 default: 默认值.看全局<beans>的default-autowire属性的值

3、byName:通过名称自动注入.只能自动注入对象,而无法注入String或基本数据类型或value属性复制东西.

4、 byType:通过类型自动注入.通过属性的类型去applicationContext.xml中找<bean>的class属性.依然对通过value赋值的属性无效.

5、 constructor:通过构造自动注入.有参构造中参数必须在ApplicationContext中都找到.

default-autowire和autowire区别:

  1. default-autowire配置<beans>当前xml文件所有<bean>都使用这种注入方式
  2. autowire:配置<bean>只针对这个<bean>生效
  3. 如果配置了default-autowire和autowire时候,autowire生效.

4. DI其他类型值的注入

A、String或基本数据类型等

<bean 

B、对象类型

<bean 

C、数组

<property 

D、List

<property 

E、set

<property 

F、Map

<property 

xml property标签注入一个类变量_依赖注入的学习相关推荐

  1. xml property标签注入一个类变量_Spring-06-依赖注入(DI)

    依赖注入(DI) 1 构造器注入 (前面已经说过了) 2 Set方式注入(重点) 依赖注入:Set注入! 依赖:bean对象的创建依赖于容器: 注入:bean对象的所有属性,由容器来注入: 环境搭建 ...

  2. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化

    动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化 Intro 之前实现的那版依赖注入框架基本可用,但是感觉还是不够灵活,而且注册服务和解析服务在同一个地方感觉有点别扭,有点职责分离不够. ...

  3. 动手造轮子:实现一个简单的依赖注入(一)

    动手造轮子:实现一个简单的依赖注入(一) Intro 在上一篇文章中主要介绍了一下要做的依赖注入的整体设计和大概编程体验,这篇文章要开始写代码了,开始实现自己的依赖注入框架. 类图 首先来温习一下上次 ...

  4. Google Guice 一个轻量级的依赖注入框架

    1.美图 2.概述 2.1 背景 在做项目的时候,看见有段代码直接是使用Google Guice 注入了avaitor表达式. 2.1 官网 Github 主页:https://github.com/ ...

  5. 动手造轮子:实现一个简单的依赖注入(零)

    动手造轮子:实现一个简单的依赖注入(零) Intro 依赖注入为我们写程序带来了诸多好处,在微软的 .net core 出来的同时也发布了微软开发的依赖注入框架 Microsoft.Extension ...

  6. java中四种注入注解,Spring中依赖注入的四种方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...

  7. 依赖注入原理 php,PHP依赖注入原理与用法分析

    本文实例讲述了PHP依赖注入原理与用法.分享给大家供大家参考,具体如下: 引言 依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗? 依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的 ...

  8. 依赖注入原理(为什么需要依赖注入)

    0. 前言 在软件工程领域,依赖注入(Dependency Injection)是用于实现控制反转(Inversion of Control)的最常见的方式之一.本文主要介绍依赖注入原理和常见的实现方 ...

  9. php 依赖注入框架,通过实现依赖注入和路由,构建一个自己的现代化PHP框架

    如何提高自己编写代码的能力呢?我们首先想到的是阅读学习优秀的开源项目,然后写一个自己的web框架或类库组件.作为web开发者,我们通常都是基于面向对象OOP来开发的,所以面向对象的设计能力或者说设计模 ...

  10. 框架依赖注入和普通依赖注入_依赖注入快速入门:它是什么,以及何时使用它...

    框架依赖注入和普通依赖注入 by Bhavya Karia 通过Bhavya Karia 介绍 (Introduction) In software engineering, dependency i ...

最新文章

  1. mysql常见内置函数_MySQL常用内置函数
  2. 修正mysqlcc在MySQL 5.0上常报的 Table 'xxx' doesn't exist 错误
  3. 【算法竞赛学习】二手车交易价格预测-Task3特征工程
  4. 上海教师计算机等级要求,计算机考试阅卷教师谈等级考试
  5. springboot 获取项目路径_怎样学习 SpringBoot
  6. mysql10038_navicat for mysql (10038)如何解决
  7. HTML之表单的基本知识
  8. C++程序设计(二:机器模拟)
  9. 一个域名下多个Vue项目
  10. iqooneo系统要不要更新_手机系统要不要升级?别纠结,1分钟看完你就知道
  11. vasp软件全名是什么_qvasp一款简单易用的VASP辅助计算软件
  12. 求和函数java_java函数求和要怎么写?java求和代码实现
  13. pmp第六版错题集6.1
  14. Linux下网络抓包工具(ngrep)
  15. BK7256,Wi-Fi6音视频soc-combo芯片,上海博通-内置Flash,支持720P
  16. 非日语专业如何有效学习日语?
  17. win10睡眠风扇仍然转动解决办法。
  18. 结合NAACL2022对计算语言学趋势的思考与分析
  19. APP开发学习思路指导
  20. 救活了一只溺水的小巴西龟

热门文章

  1. Listings of System and Object Privileges--系统和对象权限列表
  2. 标准IT POD之美
  3. MLPlatform project的统一结构-----------Model层代码编写--------业务逻辑子层:编程思路...
  4. 快速构建Windows 8风格应用25-数据绑定
  5. java中带包的类在命令行中的编译和执行中出现的问题及解决办法
  6. Unity工程导入到AndroidStudio的一些注意事项
  7. 快速查找Unity中的死循环
  8. ping 丢包 网络摄像头_Ping丢包故障案例
  9. php socket 读网页,PHP webSocket实现网页
  10. python 100 days github_GitHub - Andyhe2019/Python-100-Days: Python - 100天从新手到大师