Spring 依赖注入Dependency Injection
在当前类需要用到其他类的对象,由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相关推荐
- 依赖注入(Dependency Injection)框架是如何实现的?
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/fuzhongmin05/ article/details/109572151 当创建对象是一件庞大又复杂的大工程的时候,我们一 ...
- SAP Spartacus 中的依赖注入 Dependency Injection 介绍
先了解 Angular 中的依赖注入 依赖项是指某个类执行其功能所需的服务或对象.依赖项注入(DI)是一种设计模式,在这种设计模式中,类会从外部源请求依赖项而不是让类自己来创建它们. Angular ...
- [ .NET依赖注入] Dependency Injection in.NET - A DependencyInjection tasting menu [2]
Menu: 对依赖项注入的误解 依赖项注入的目的 依赖项注入的好处 何时应用依赖项注入 您可能已经听说过制作酱汁意大利面酱(sauce béarnaise)很困难.即使是许多经常做饭的人也从未尝试做 ...
- java injection,依赖注入(dependency injection)
//@EJB (mappedName="HelloWorldBean/remote") HelloWorld helloworld; -.. @EJB注释如果被用在JavaBean ...
- Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)
一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运 ...
- Spring依赖注入和控制反转
文章目录 1.依赖注入 1.1.依赖注入和控制反转的概念 1.2.依赖注入的实现方式 1.3.控制反转的具体实现 1.4.依赖注入的具体实现 1.5.依赖注入和控制反转总结 1.依赖注入 1.1.依赖 ...
- Spring 依赖注入的理解及三种注入方式
Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...
- diy实现spring依赖注入
[README] 本文diy代码实现了 spring 依赖注入,一定程度上揭示了依赖注入原理: [1]控制反转-Inversion of Control 是一种编码思想,简而言之就是 应用程序A可以使 ...
- Spring依赖注入–字段vs设置器vs构造函数注入
欢迎使用Spring Dependency Injection –字段,设置器,构造函数注入教程. 了解场注入 , 二传手注入和构造函数注入之间的区别. 借助代码示例,我们将看到使用每个示例的好处以及 ...
最新文章
- Open3d学习计划—高级篇 4(多视角点云配准)
- 新入门的小白,整理一下特别简单实用的div+css兼容性的问题。
- 个性化联邦学习算法框架发布,赋能AI药物研发
- Android:安卓线性布局(属性)
- python 实现Hadoop的partitioner和二次排序
- catia保存成stp文件时部件丢失_超详细的分布式文件系统FastDFS磁盘恢复介绍
- uniapp H5 扫码 扫一扫 功能
- (liunx)全套青龙面板+傻妞流水版2022年8月22日更新
- 在win服务器查看系统报错日志文件,win2003查看及管理系统日志的方法
- ASP.Net+XML打造留言薄
- Linux搭建Java部署环境
- 视频号如何使用OBS推流?
- 解决undefined reference to symbol ‘LZ4_decompress_safe‘问题
- css 文本超出就隐藏并且显示省略号
- ocp跟oce的区别 oracle_六种角度看OCA与OCP、OCM区别
- BAT 大企内部面试题泄密
- 错题本——数据库系统工程师 2010
- 关于DOTA2排名前5战队惯用英雄分析
- python整数保留两位小数_python保留两位小数
- vue 手机移动端预览pdf
热门文章
- Python之网络爬虫(Xpath语法、Scrapy框架的认识)
- php slug,PHP函数使slug(URL字符串)
- 乐高创意机器人moc_LEGO乐高MOC作品欣赏:超有爱机器人偶E-MOTE
- androidsdcard挂载目录_Android获取手机自带SDCard和外置SDCard路径
- 外观模式和代理模式的联系和区别_设计模式之代理模式
- Python演示正多边形逼近圆周过程中计算圆周率近似值
- Python分离GIF动画成为多帧图像
- java引用类型有啥_Java引用类型原理深度剖析,看完文章,90%的人都收藏了
- java 排序方法详解_java中关于排序方式的实例讲解
- android一般会重载7个方法,《Android技术应用》答案(2013年)