在当前类需要用到其他类的对象,由spring为我们提供,只需要在文件中配置
注意经常变换的数据,不使用注入的方式

能注入的数据:有三类
基本类型和String
其他bean类型(在配置文件中或者注解配置过的bean)
复杂类型/集合类型
注入的方式:有三种
第一种:使用构造函数提供
第二种:使用set方法提供
第三种:使用注解提供(明天的内容)

构造函数注入

使用的标签:constructor-arg
标签出现的位置:bean标签的内部
标签中的属性
type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
name<常用>:用于指定给构造函数中指定名称的参数赋值
value:用于提供基本类型和String类型的数据
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象

优势:
在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
弊端:
改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供。

<bean id="accountService" class="com.service.impl.AccountServiceImpl"><constructor-arg name="name" value="泰斯特"></constructor-arg><constructor-arg name="age" value="18"></constructor-arg><constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
<!-- 配置一个日期对象 -->
<bean id="now" class="java.util.Date"></bean>
package com.service.impl;
import com.service.IAccountService;
import java.util.Date;public class AccountServiceImpl implements IAccountService {//如果是经常变化的数据,并不适用于注入的方式private String name;private Integer age;private Date birthday;public AccountServiceImpl(String name,Integer age,Date birthday){this.name = name;this.age = age;this.birthday = birthday;}public void  saveAccount(){System.out.println("saveAccount方法执行"+name+","+age+","+birthday);}
}

Set方法注入

涉及的标签:property
出现的位置:bean标签的内部
标签的属性:
name:用于指定注入时所调用的set方法名称
value:用于提供基本类型和String类型的数据
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
优势:
创建对象时没有明确的限制,可以直接使用默认构造函数
弊端:
如果有某个成员必须有值,则获取对象是有可能set方法没有执行。

<bean id="accountService2" class="com.service.impl.AccountServiceImpl2"><property name="name" value="TEST" ></property><property name="age" value="21"></property><property name="birthday" ref="now"></property>
</bean>
package com.service.impl;import com.itheima.service.IAccountService;import java.util.Date;public class AccountServiceImpl2 implements IAccountService {private String name;private Integer age;private Date birthday;public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}public void setBirthday(Date birthday) {this.birthday = birthday;}public void  saveAccount(){System.out.println("saveAccount方法执行"+name+","+age+","+birthday);}
}

复杂类型注入

用于给List结构集合注入的标签:
list array set
用于个Map结构集合注入的标签:
map props
结构相同,标签可以互换

    <bean id="accountService3" class="com.service.impl.AccountServiceImpl3"><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><property name="myMap"><props><prop key="testC">ccc</prop><prop key="testD">ddd</prop></props></property><property name="myProps"><map><entry key="testA" value="aaa"></entry><entry key="testB"><value>BBB</value></entry></map></property></bean>
package com.service.impl;import com.service.IAccountService;import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.Map;public class AccountServiceImpl3 implements IAccountService {private String[] myStrs;private List<String> myList;private Set<String> mySet;private Map<String,String> myMap;private Properties myProps;public void setMyStrs(String[] myStrs) {this.myStrs = myStrs;}public void setMyList(List<String> myList) {this.myList = myList;}public void setMySet(Set<String> mySet) {this.mySet = mySet;}public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}public void setMyProps(Properties myProps) {this.myProps = myProps;}public void  saveAccount(){System.out.println(Arrays.toString(myStrs));System.out.println(myList);System.out.println(mySet);System.out.println(myMap);System.out.println(myProps);}}

Spring 依赖注入Dependency Injection相关推荐

  1. 依赖注入(Dependency Injection)框架是如何实现的?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/fuzhongmin05/ article/details/109572151 当创建对象是一件庞大又复杂的大工程的时候,我们一 ...

  2. SAP Spartacus 中的依赖注入 Dependency Injection 介绍

    先了解 Angular 中的依赖注入 依赖项是指某个类执行其功能所需的服务或对象.依赖项注入(DI)是一种设计模式,在这种设计模式中,类会从外部源请求依赖项而不是让类自己来创建它们. Angular ...

  3. [ .NET依赖注入] Dependency Injection in.NET - A DependencyInjection tasting menu [2]

    Menu: 对依赖项注入的误解 依赖项注入的目的 依赖项注入的好处 何时应用依赖项注入  您可能已经听说过制作酱汁意大利面酱(sauce béarnaise)很困难.即使是许多经常做饭的人也从未尝试做 ...

  4. java injection,依赖注入(dependency injection)

    //@EJB (mappedName="HelloWorldBean/remote") HelloWorld helloworld; -.. @EJB注释如果被用在JavaBean ...

  5. Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

    一.思想理解    Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运 ...

  6. Spring依赖注入和控制反转

    文章目录 1.依赖注入 1.1.依赖注入和控制反转的概念 1.2.依赖注入的实现方式 1.3.控制反转的具体实现 1.4.依赖注入的具体实现 1.5.依赖注入和控制反转总结 1.依赖注入 1.1.依赖 ...

  7. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

  8. diy实现spring依赖注入

    [README] 本文diy代码实现了 spring 依赖注入,一定程度上揭示了依赖注入原理: [1]控制反转-Inversion of Control 是一种编码思想,简而言之就是 应用程序A可以使 ...

  9. Spring依赖注入–字段vs设置器vs构造函数注入

    欢迎使用Spring Dependency Injection –字段,设置器,构造函数注入教程. 了解场注入 , 二传手注入和构造函数注入之间的区别. 借助代码示例,我们将看到使用每个示例的好处以及 ...

最新文章

  1. Open3d学习计划—高级篇 4(多视角点云配准)
  2. 新入门的小白,整理一下特别简单实用的div+css兼容性的问题。
  3. 个性化联邦学习算法框架发布,赋能AI药物研发
  4. Android:安卓线性布局(属性)
  5. python 实现Hadoop的partitioner和二次排序
  6. catia保存成stp文件时部件丢失_超详细的分布式文件系统FastDFS磁盘恢复介绍
  7. uniapp H5 扫码 扫一扫 功能
  8. (liunx)全套青龙面板+傻妞流水版2022年8月22日更新
  9. 在win服务器查看系统报错日志文件,win2003查看及管理系统日志的方法
  10. ASP.Net+XML打造留言薄
  11. Linux搭建Java部署环境
  12. 视频号如何使用OBS推流?
  13. 解决undefined reference to symbol ‘LZ4_decompress_safe‘问题
  14. css 文本超出就隐藏并且显示省略号
  15. ocp跟oce的区别 oracle_六种角度看OCA与OCP、OCM区别
  16. BAT 大企内部面试题泄密
  17. 错题本——数据库系统工程师 2010
  18. 关于DOTA2排名前5战队惯用英雄分析
  19. python整数保留两位小数_python保留两位小数
  20. vue 手机移动端预览pdf

热门文章

  1. Python之网络爬虫(Xpath语法、Scrapy框架的认识)
  2. php slug,PHP函数使slug(URL字符串)
  3. 乐高创意机器人moc_LEGO乐高MOC作品欣赏:超有爱机器人偶E-MOTE
  4. androidsdcard挂载目录_Android获取手机自带SDCard和外置SDCard路径
  5. 外观模式和代理模式的联系和区别_设计模式之代理模式
  6. Python演示正多边形逼近圆周过程中计算圆周率近似值
  7. Python分离GIF动画成为多帧图像
  8. java引用类型有啥_Java引用类型原理深度剖析,看完文章,90%的人都收藏了
  9. java 排序方法详解_java中关于排序方式的实例讲解
  10. android一般会重载7个方法,《Android技术应用》答案(2013年)