依赖注入DI

  • 当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入

  • 所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理

例题

1,建实体类Address和Student

Student

 1 public class Student {
2 private String name;
3 private Address address;
4 private String[] books;
5 private List<String> hobbys;
6 private Map<String,String> card;
7 private Set<String> games;
8 private String girlFriend;
9 private Properties info;
10
11 public Student() {
12 }
13
14 public void setName(String name) {
15 this.name = name;
16 }
17
18 public void setAddress(Address address) {
19 this.address = address;
20 }
21
22 public void setBooks(String[] books) {
23 this.books = books;
24 }
25
26 public void setHobbys(List<String> hobbys) {
27 this.hobbys = hobbys;
28 }
29
30 public void setCard(Map<String, String> card) {
31 this.card = card;
32 }
33
34 public void setGames(Set<String> games) {
35 this.games = games;
36 }
37
38 public void setGirlFriend(String girlFriend) {
39 this.girlFriend = girlFriend;
40 }
41
42 public void setInfo(Properties info) {
43 this.info = info;
44 }
45
46 @Override
47 public String toString() {
48 return "Student{" +
49 "name='" + name + '\'' +
50 ", address=" + address.toString() +
51 ", books=" + Arrays.toString(books) +
52 ", hobbys=" + hobbys +
53 ", card=" + card +
54 ", games=" + games +
55 ", girlFriend='" + girlFriend + '\'' +
56 ", info=" + info +
57 '}';
58 }
59 }

Address

 1 public class Address {
2 private String address;
3
4 public Address() {
5 }
6
7 public void setAddress(String address) {
8 this.address = address;
9 }
10
11 @Override
12 public String toString() {
13 return "Address{" +
14 "address='" + address + '\'' +
15 '}';
16 }
17 }

2,建配置文件 beans.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
5 http://www.springframework.org/schema/beans/spring-beans.xsd">
6
7 <!--Address-->
8 <bean id="addr" class="pojo.Address">
9 <property name="address" value="西安"/>
10 </bean>
11
12 <!--Student-->
13 <bean id="Student" class="pojo.Student">
14
15 <!--常量注入 普通字段-->
16 <property name="name" value="闪电侠"/>
17
18 <!--Bean注入 引用其他bean使用ref-->
19 <property name="address" ref="addr"/>
20
21 <!--数组注入-->
22 <property name="books">
23 <array>
24 <value>西游记</value>
25 <value>水浒传</value>
26 <value>红楼梦</value>
27 <value>三国演义</value>
28 </array>
29 </property>
30
31 <!--List注入-->
32 <property name="hobbys">
33 <list>
34 <value>代码</value>
35 <value>电影</value>
36 <value>音乐</value>
37 </list>
38 </property>
39
40 <!--Map注入-->
41 <property name="card">
42 <map>
43 <entry key="IdCard" value="666666888888884444"/>
44 <entry key="银行卡" value="111122223333444"/>
45 </map>
46 </property>
47
48 <!--Set注入-->
49 <property name="games">
50 <set>
51 <value>王者荣耀</value>
52 <value>绝地求生</value>
53 </set>
54 </property>
55
56 <!--Null空值注入-->
57 <property name="girlFriend">
58 <null/>
59 </property>
60
61 <!--Properties注入-->
62 <property name="info">
63 <props>
64 <prop key="学号">2019032324</prop>
65 <prop key="性别">男</prop>
66 <prop key="姓名">闪电侠</prop>
67 </props>
68 </property>
69
70 </bean>
71
72 </beans>

3,编写测试类

 1 import org.junit.Test;
2 import org.springframework.context.support.ClassPathXmlApplicationContext;
3
4 public class StudentTest {
5 @Test
6 public void Test(){
7 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
8 Student student = (Student) context.getBean("Student");
9 System.out.println(student.toString());
10 }
11 }

4,运行结果

Spring(2):依赖注入DI的更多相关文章

  1. 【学习笔记】 使用XML配置和注解实现Spring的依赖注入DI (2-3-2)

    Spring的四个核心组件 1.beans Bean是包装应用程序自定义对象Object的 Object中保存数据 2.core  3.context 一个Bean的关系集合 4.expression ...

  2. spring的依赖注入DI(IOC)

    1.手动注入 (1)set注入 public class UserService { private UserDao userDao; public void setUserDao(UserDao d ...

  3. Spring的依赖注入(DI)三种方式

    Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...

  4. spring(3)------控制反转(IOC)/依赖注入(DI)

    一.spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control).它把传统上由程序代码直接操控的对象的调用权交给容器.通过容器来实现对象组件的装配和管理. 所谓 ...

  5. Spring框架学习笔记(1)——控制反转IOC与依赖注入DI

    Spring框架的主要作用,就是提供了一个容器,使用该容器就可以创建并管理对象.比如说Dao类等,又或者是具有多依赖关系的类(Student类中包含有Teacher类的成员变量) Spring有两个核 ...

  6. [Android]使用Dagger 2依赖注入 - DI介绍(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...

  7. 浅析“依赖注入(DI)/控制反转(IOC)”的实现思路

    开始学习Spring的时候,对依赖注入(DI)——也叫控制反转(IOC)—— 的理解不是很深刻.随着学习的深入,也逐渐有了自己的认识,在此记录,也希望能帮助其他入门同学更深入地理解Spring.本文不 ...

  8. Atitit js中的依赖注入di ioc的实现

    Atitit js中的依赖注入di ioc的实现 全类名(FQCN)为标识符1 混合请求模式1 使用类内  builder  即可..2 Service locator method走ok拦2 Jav ...

  9. 依赖注入(DI)与服务容器(IoC)

    参考文章:http://www.yuansir-web.com/2014/03/20/%E7%90%86%E8%A7%A3php-%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A ...

随机推荐

  1. 【java+selenium3】隐式等待+显式等待 (七)

    一.隐式等待 -- implicitlyWait 调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit); / ...

  2. [源码解析] PyTorch 分布式(3) ----- DataParallel(下)

    [源码解析] PyTorch 分布式(3) ----- DataParallel(下) 目录 [源码解析] PyTorch 分布式(3) ----- DataParallel(下) 0x00 摘要 0 ...

  3. 问题 K: 找点

    题目描述 上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点.但是这几天LYH太忙了,你们帮帮他吗? 输入 多组测试数据. 每组数据先输入一个N,表示有N个闭区间(N ...

  4. C#-WPF数据绑定基础(一)

    前言:WPF数据绑定技术有效的提高了程序的容错率,可以最大程度的保持程序的健壮性,从而降低程序在使用过程中崩掉的可能性. 接下来,我将分享一下我在写测量程序过程中所用到的数据绑定方面的知识 首先,我所 ...

  5. [hdu6761]Minimun Index

    $lyndon\ word$(以下简写为Lw):对于一个字符串s,其为Lw当且仅当其的最小后缀为自身 性质:若$u<v$为LW,那么$uv$也为Lw(反证法即可证) $lyndon$分解:将一个 ...

  6. WebRTC打开本地摄像头

    本文使用WebRTC的功能,打开电脑上的摄像头,并且把摄像头预览到的图像显示出来. 纯网页实现,能支持除IE外的多数浏览器.手机浏览器也可用. 引入依赖 我们需要引入adapter-latest.js ...

  7. Ubuntu文件系统结构

    /bin: bin是Binary的缩写.存放系统中最常用的可执行文件(二进制). /boot: 这里存放的是linux内核和系统启动文件,包括Grub.lilo启动器程序. /dev: dev是Dev ...

  8. 干掉idea视图黄色警告

    最近在写jsp代码黄色很烦人,安装codeglance插件小地图感觉也是很不舒服 ,百度了一下可以取消警告: https://blog.csdn.net/qq_40634961/article/det ...

  9. Atcoder 2444 - JOIOI 王国(二分)

    题面传送门 记 \(mxi\) 为 IOI 国海拔的最大值,\(mni\) 为 IOI 国海拔的最小值,\(mxj\) 为 JOI 国海拔的最大值,\(mnj\) 为 JOI 国海拔的最小值. 不难发 ...

  10. Codeforces 1423N - BubbleSquare Tokens(归纳+构造)

    Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...