依赖注入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. Java8新特性之Optional,如何优雅地处理空指针

    是什么 ​ 从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)-- 每个 Java ...

  2. 一个疏忽损失惨重!就因为把int改成Integer,第2天被辞了

    1 故事背景 一个程序员就因为改了生产环境上的一个方法参数,把int型改成了Integer类型,因为涉及到钱,结果上线之后公司损失惨重,程序员被辞退了.信不信继续往下看.先来看一段代码: public ...

  3. js中修改this指向的方法(call,apply,bind)

    前言:call.apply和bind都是为了改变某个函数运行时的this指向的,对于前端人员来说,关于this的掌握程度,直接决定了前端水平的高低.下面我们就来简单浅显易懂的来看一下es5中常用的三种 ...

  4. 关于Java内存泄漏的介绍

    翻译自这篇文章 Java一个最显著的优势就是它的内存管理.你只需要简单地创建对象,而Java垃圾收集器会负责内存的分配与释放.不过,事情并没有那么简单,因为在Java应用中时常会出现内存泄漏. 1. ...

  5. [cf1495F]Squares

    令$nex_{i}=\min_{i<j,p_{i}<p_{j}}j$(即$i$的第2类边),若不存在此类$j$则$nex_{i}=n+1$ 建一棵树,其以0为根,且$1\le i\le n ...

  6. [loj3246]Cave Paintings

    题中所给的判定条件似乎比较神奇,那么用严谨的话来说就是对于两个格子(x,y)和(x',y'),如果满足:1.$x\le x'$:2.从(x,y)通过x,x+1,--,n行,允许向四个方向走,不允许经过 ...

  7. 32、最长有效括号 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(32)最长有效括号 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "滑动窗 ...

  8. 【贾志豪NOIP模拟题】慰问员工 cheer 【最小生成树】【对边权值的一些处理】

    Description LongDD 变得非常懒, 他不想再继续维护供员工之间供通行的道路. 道路被用来连接 N(5 <= N <= 10,000)个房子, 房子被连续地编号为 1..N. ...

  9. 【NOI导刊200908模拟试题02 题4】【二分+Dijkstra】 收费站

    Description 在某个遥远的国家里,有n个城市.编号外1,2,3,-,n. 这个国家的政府修建了m条双向的通路.每条公路连接着两个城市.沿着某条公路,开车从一个城市到另一个城市,需要花费一定的 ...

  10. Codeforces 1326F2 - Wise Men (Hard Version)(FWT+整数划分)

    Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F ...