依赖注入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. 【死磕 NIO】— Proactor模式是什么?很牛逼吗?

    大家好,我是大明哥. 上篇文章我们分析了高性能 IO模型Reactor模式,了解了什么是Reactor 模式以及它的三种常见的模式,这篇文章,大明再介绍另外一种高性能IO模型: Proactor. 为 ...

  2. jenkins bat删除指定路径下的文件及文件夹

    最近在用jenkins集成,生成allure测试报告,但是每次生成的allure测试报告,都是上一次执行的痕迹.比如这次我只运行了100个用例,结果显示运行2000条,上一次运行的用例,时间也涵括了上 ...

  3. 菜鸡的Java笔记 - java 断言

    断言:assert (了解)        所谓的断言指的是在程序编写的过程之中,确定代码执行到某行之后数据一定是某个期待的内容        范例:观察断言 public class Abnorma ...

  4. jsonp初识

    我们在项目中对接口发起请求时会遇到一个跨域请求的问题,在这个时候,我们可以用一个较为简单的方法解决:jsonp 后端(以php为例): <?php header('Content-type: a ...

  5. 学不懂Netty?看不懂源码?不存在的,这篇文章手把手带你阅读Netty源码!

    阅读这篇文章之前,建议先阅读和这篇文章关联的内容. 1. 详细剖析分布式微服务架构下网络通信的底层实现原理(图解) 2. (年薪60W的技巧)工作了5年,你真的理解Netty以及为什么要用吗?(深度干 ...

  6. [cf1515I]Phoenix and Diamonds

    将$n$类物品按照价值为第一关键字(从大到小).质量为第二关键字(从小到大)排序,此时贪心策略即依次贪心选(排序后)第$i$类的物品(其中$i$从1到$n$) 为了方便,排序后第$i$类物品质量.价值 ...

  7. [hdu6601]Keen On Everything But Triangle

    有两个结论:1.排序后,答案一定是连续的三个数:2.当序列长度超过44一定有三个相同的数(因为即使该序列是斐波那契数列,此时也超过了1e9),然后用主席树等数据结构(略卡常,建议主席树)来维护前45大 ...

  8. linux的ip文件参数说明

    TYPE=Ethernet # 网卡类型:为以太网 PROXY_METHOD=none # 代理方式:关闭状态 BROWSER_ONLY=no # 只是浏览器:否 BOOTPROTO=dhcp # 网 ...

  9. Python之阶乘代码

    #coding=utf-8 while True:     num = int(input("请输入要阶乘的正整数数字,按负数退出:"))     jiec=1     if nu ...

  10. 洛谷 P4707 - 重返现世(扩展 Min-Max 容斥+背包)

    题面传送门 首先看到这种求形如 \(E(\max(T))\) 的期望题,可以套路地想到 Min-Max 容斥 \(\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T| ...