Spring学习4之依赖注入(DI)
前言
上节学习了IOC创建对象的方式,我们在不知不觉中使用了最简单的构造注入,什么是构造注入,什么又是依赖注入呢?
一、首先我们要了解DI是什么?
创建对象的过程中Spring可以依据配置对象的属性进行设置,这个过程称之为依赖注入,也即DI。
顾名思义,你就会明白构造注入就是通过构造方法给属性进行赋值。
二、DI的几种注入方式
需要用到的实体类:
package com.shan.pojo;import lombok.Data;
import lombok.ToString;@Data @ToString
public class Address {private String address;
}
package com.shan.pojo;import lombok.Data;
import lombok.ToString;import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
@Data @ToString
public class Student {private String name;private Address address;private String[] books;private List<String> hobbies;private Map<String,String> card;private Set<String> games;private String wife;private Properties info;
}
package com.shan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data @ToString @NoArgsConstructor @AllArgsConstructor
public class User {private String name;private String age;}
1.普通注入
<!--普通注入--><property name="name" value="小黑神"/>
2.Bean注入
<!--Bean注入--><property name="address" ref="address"/>
3.数组注入
<!--数组注入--><property name="books"><array><value>红楼梦</value><value>西游记</value><value>水浒传</value><value>三国演义</value></array></property>
4.List注入
<!--List集合注入--><property name="hobbies"><list><value>女朋友</value><value>敲代码</value><value>刷抖音</value><value>看小说</value><value>玩游戏</value></list></property>
5.Map注入
<!--Map注入--><property name="card"><map><entry key="身份证" value="42102220001002xxxx"/><entry key="学生证" value="18103020134"/><entry key="银行卡" value="666666666666666666"/></map></property>
6.Set注入
<!--Set集合注入--><property name="games"><set><value>lol</value><value>coc</value><value>bob</value><value>cs</value><value>永劫无间</value></set></property>
7.null注入
<!--null注入--><property name="wife"><value>null</value></property>
8.Properties注入
<!--Properties集合注入--><property name="info"><props><prop key="学号">18103020134</prop><prop key="性别">男</prop><prop key="username">root</prop><prop key="password">xxx</prop></props></property>
拓展注入
<!--拓展注入方式p命名空间和c命名空间不能是直接使用,需要导入xml约束!xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.springframework.org/schema/c"--><!--p命名空间注入,可以直接注入属性的值:property--><bean id="user" class="com.shan.pojo.User" p:name="小黑神" p:age="18"/><!--c命名空间注入,可以通过构造器注入:construct-args--><bean id="user2" class="com.shan.pojo.User" c:name="小黑神zxs" c:age="18" scope="singleton"/><!--作用域scope="singleton" 单例模式 Spring默认scope="prototype" 原型模式 每次从容器中get的时候都会产生一个新对象!-->
测试
import com.shan.pojo.Student;
import com.shan.pojo.User;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {@Testpublic void testStudent(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Student student = (Student) context.getBean("student");System.out.println(student);}@Testpublic void testUser(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("userbean.xml");User user = context.getBean("user", User.class);User user2 = context.getBean("user2", User.class);System.out.println(user);System.out.println(user2);}//User(name=小黑神, age=18)//User(name=小黑神zxs, age=18)}
作者有话说
博客创作不易,希望看到这里的读者动动你的小手点个赞,如果喜欢的小伙伴可以一键三连,作者大大在这里给大家谢谢了。
Spring学习4之依赖注入(DI)相关推荐
- 初学者都能看懂的 Spring 源码之依赖注入(DI)源码分析
前言 在面试中,经常被问到 Spring 的 IOC 和 DI (依赖注入),很多人会觉得其实 IOC 就是 DI ,但是严格上来说这两个其实并不等价,因为 IOC 注重的是存,而依赖注入注重的是取, ...
- Spring学习资料之 依赖注入(二)
1.2 属性注入(Field Inject) 1.2.1 基本属性注入 首先来看一个例子.Service.java 1 @ImplementedBy(ServiceImpl.class) 2 publ ...
- 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)
spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...
- 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)...
前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...
- Spring框架—③依赖注入DI、Bean作用域及自动装配
依赖注入 DI,Dependency injection 依赖: 指bean对象的创建依赖于Spring容器 注入: 指Bean对象所依赖的资源,由容器来设置和装配 在beans.xml中配置 1.常 ...
- 控制反转IOC与依赖注入DI
为什么80%的码农都做不了架构师?>>> 1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最 ...
- 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标 1)搞清楚构造参数依赖注入的过程及类 2)搞清楚注解方式的属性依赖注入在哪里完成的. 学习思路 1)思考我们手写时是如何做的 2)读 spring 源码对比看它的实现 3) ...
- 控制反转(IoC)与依赖注入(DI)详解
文章目录 什么是控制反转(IoC) 控制反转(IoC)有什么作用 控制反转(IoC)是怎么分类的 依赖注入 接口注入 Setter方法注入 构造器注入 依赖查找 上下文依赖查找(Contextuali ...
最新文章
- Ext.NET加入自定义验证JS函数
- 心智图/思维导图(Mind Map/Mind Mapping),思维导图介绍
- D3可视化:(1)初次见面,SVG与D3的魅力
- ip地址互转十进制数字(函数)
- JavaScript 学习笔记— —Date对象
- JSP 中的几种注释
- windows系统生成tar
- CentOS 7 多网卡绑定
- 如何加载和保存AutoCAD DXF文件(七参数法)
- 用计算机控制人造卫星和导弹发射,用计算机控制人造卫星和导弹的发射,按计算机应用的分类,它应属于什么...
- 网站CNZZ数据统计的实现方式
- BP神经网络原理(附实验程序)
- Dharma勒索软件继续大肆传播,据称已有100多家希腊网站沦陷
- jlink修复固件教程
- PHP的ES入门(一)—— Index的创建和删除
- python人民币小写转大写_Python小程序 -- 人民币小写转大写辅助工具
- 基于新浪微博的男女性择偶观数据分析
- UVa 紫书50题留念
- python-os模块使用
- 从面试官的角度,来聊聊培训班对程序员的帮助!