DI(Dependency Injection)

1)、功能
DI同于IOC,当一个类需要依赖另一个类对象时,把另一个类对象赋值这个类对象的过程,即为依赖注入

2)、实现
在<property>元素中进行赋值时,使用ref引用另一个对象的bean id

<!-- DI(对象引用) -->
<property name="theTest" ref="DefaultTest"></property>

自动注入

1)、前提
Spring配置文件中,对象属性名name和引用时的bean id相同

2)、实现
在引用对象中被bean元素中,添加属性autowire(五个值):
①no:不注入
②default :默认值,来源于根元素属性default-autowire="",两者都默认时都为no
③byName:容器中找其他和属性名对应的bean id

<!--被引用的类-->
<bean id="myTest" class="com.mfqh.pojo.Test"><constructor-arg name="index" value="10"></constructor-arg><constructor-arg name="data"  value="abc"></constructor-arg>
</bean>
<!--引用类-->
<bean id="testDI" class="com.mfqh.pojo.TestDI" autowire="byName"></bean>

测试:

④byType:容器中找其他和属性类型对应的class
有一种特殊情况:类中有多个属性是同一种类类型

//若在TestDI中设置两个属性(是同一个类的两个不同对象):
private Test myTest;private Test myTest01;
<!--把注入类型改为byType-->
<bean id="testDI" class="com.mfqh.pojo.TestDI" autowire="byType"></bean>

结果:

发现此时类中的两个属性是对同一个对象的引用,考虑到有可能是Spring容器管理对象默认单例的原因
于是,修改被引用对象scope=“prototype",即多例:

所以可以根据byType类型给同一类型的多个属性注入

⑤constructor:需在类中提供构造方法,且方法形参名必须和bean id相同,(实质通过byName寻找)

Tips:根元素属性default-autowire="",可以配置当前文件全局默认注入方式

软编码加载(.properties文件)

将一些信息提取到文件中,方便部署
①添加xmlns:context和xsi:schemaLocation

xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"

②加载文件:
<context:property-placeholder location="classpath:文件路径,classpath: "/>
Ps:classpath是定位到src下
会将文件信息交给Spring容器进行管理

Ps:也可使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
其属性location,值为properties文件所在路径
来加载文件

③配置文件中使用${key}进行提取
如:

<bean id="testPro" class="com.mfqh.pojo.TestProperties"><property name="name" value="${peo.name}"/><property name="age" value="${peo.age}"/><property name="sex" value="${peo.sex}"/>
</bean>

Tips:在类中属性前使用注解@Value("${key}),即可获取到信息,记得需扫描注解
Ps,自动注入的级别较高:先寻找需要注入的类进行实例化,使用时不会加载到文件信息
因此,对于需要加载文件信息的bean,在被引用时,不能使用自动注入(或替换为value,不使用注入)

Spring框架 DI相关推荐

  1. Spring 框架 IOC 与 DI 的总结

    一:Spring并天下 1:Spring帝国: ①:Spring崛起 什么是Spring:源于Rod Johnson在其著作<Expert one on one J2EE design and ...

  2. Spring 框架教程

    Spring 框架教程 Spring Framework是最流行的Java EE框架之一.本文面向希望学习Spring框架体系结构的Java开发人员,它的核心组件以及属于Spring框架伞的各种项目. ...

  3. 大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖

    Spring-IOC.DI 零.Spring简介 Spring官网:http://projects.spring.io/spring-framework Jar包的下载地址:http://repo.s ...

  4. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  5. Spring框架——IOC、DI

    本篇博客主要介绍Java中的IOC和DI,以及在String框架中的应用.首先,我们将对IOC和DI进行概念介绍,然后讲解它们的关系及在String框架中的应用,最后通过一个实例来展示它们的具体用法. ...

  6. Spring框架IoC/DI原理及实现

    1.概念 IoC:指将对象的创建权,交给到Spring容器: DI :指Spring创建对象的过程中,将对象依赖的属性通过配置的方式自动的设值给当前的对象 . IoC/DI注解详解 完成IoC/DI, ...

  7. SSM—Spring框架,IOC理论推导,Hello Spring,IOC创建对象方式,Spring的配置,DI(依赖注入)

    文章目录 1.Spring 1.1.Spring简介(了解) 1.2.spring优点 1.3.组成(七大模块) 1.4.拓展 2.IOC理论推导 2.1.IOC本质 3.Hello Spring 4 ...

  8. 三大框架之spring框架+IoC控制反转、DI依赖注入

    三大框架:业务层框架Spring+IoC+DI 往期文章:jsp与cookie.重定向与RESTFul架构支持 下一章节: 持久层框架MyBatis 初识Spring框架 MyBatis 入门http ...

  9. Spring框架,IOC,DI,AOP,单例多例,懒加载

    文章目录 1.Spring 2.IOC 2.1 什么是IOC 2.2 xml配置文件管理对象 2.3 全注解的方式管理对象 3.Spring创建对象-工厂模式(必会内容) 4.单例与多例 4.1@Sc ...

最新文章

  1. 【381天】我爱刷题系列140(2018.02.21)
  2. Maven系列三Maven内置变量
  3. mstsc连接远程桌面如何挂载本地磁盘
  4. 广西计算机电缆线报价,广西壮族自治区耐火计算机电缆JYPVP32哪里便宜
  5. C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast
  6. BinaryStar代码分析前言
  7. thinkphp单入口和多入口的访问方法
  8. java bio例子_传统的BIO
  9. java启动线程时 extends与implements的一个差异
  10. Python知识点-py2和py3编码
  11. HDU 5975 2016ICPC大连 E: Aninteresting game(树状数组原理)
  12. jquery一些 事件的用法
  13. 码农谷 找出N之内的所有完数
  14. imdisk虚拟光驱安装linux,ImDisk Virtual Disk Driver(虚拟光驱)
  15. 同步软件ActiveSync连接问题
  16. Golang面试问题汇总
  17. 论文解读-CenterNet:Keypoint Triplets for Object Detection
  18. 微信开发生成测试签名--signature,并使用微信jssdk获取位置
  19. hdu 3995 Perfect Faceless Void
  20. div css背景自动渐变色,div+css背景渐变色代码

热门文章

  1. 创建设计模式 - 原型设计模式
  2. 更新mac系统中homebrew的源,更改为清华大学的源
  3. [webpack-cli] Unable to load ‘@webpack-cli/serve‘ command
  4. chrome下载地址
  5. C#LeetCode刷题-树状数组
  6. C#LeetCode刷题-分治算法
  7. C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)
  8. actor akka_如果您仍在使用同步,则应改用Akka Actor-这就是为什么
  9. Python——单元测试
  10. cpu 保存模式的内存访问向下兼容原理