依赖注入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. [python]pytest实现WEB UI自动化

    前言:其实这篇写的是pytest的测试框架运用,实现自动化和https://www.cnblogs.com/Jack-cx/p/9357658.html 原理一致 1.为啥不用unittest Pyt ...

  2. pylint代码静态检查

    使用git-pylint-commit-hook工具 pre-commit脚本 配置文件放在仓库根目录/hooks下面 git-pylint-commit-hook --limit=9.0 --pyl ...

  3. 12组-Alpha冲刺-3/6

    一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15546442.html 小组人数:10人 二.冲刺概况汇报 侯钦凯 过去两天完成 ...

  4. Python科普系列——类与方法(上篇)

    欢迎来到新的系列,up又开新坑了~~ 实际上,Python作为一门易用性见长的语言,看上去简单,却仍然有很多值得一说的内容,因此这个系列会把Python中比较有意思的地方也给科普一遍.而另一方面,关于 ...

  5. Visual Studio中使用Macros插件给代码添加注释、时间和以及自动脚本

    title: Visual Studio中使用Macros插件给代码添加注释.时间和以及自动脚本 date: 2020-09-11 sidebarDepth: 2 tags: 代码 Visual st ...

  6. RabbitMQ Network Partitions 处理策略

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 网络分区的意义 RabbitMQ的模型 ...

  7. 路径前面加与不加"/"的区别

    加"/"是绝对路径, 不加"/"是相对路径.假设你的这个html文件的路径是www.example.com/path/to/html/a.html,那么src= ...

  8. Hi3516开发笔记(三):Hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析

    前言   前面进行了可以传输,那么写一个简单的C程序来交叉编译并传入运行.   虚拟机   上一篇搭建的虚拟机环境,包含了sftp传递文件,网络能ping通,基于上一篇的虚拟机继续搭建.   海思交叉 ...

  9. Go语言程序结构之变量

    初识Go语言之变量 var声明创建一个具体类型的变量,然后给它附加一个名字,设置他的初始值,这种声明都是一个通用的形式: var name type = expression 在实际的开发中,为了方便 ...

  10. DTOJ 4030: 排列计数

    [题目描述] 求有多少个1到n的排列满足恰有$k$对在排列中相邻的数满足前小于后,答案对2012取模. [输入] 一行2个正整数$n,k$. [输出] 输出一个整数表示答案. [样例输入] 5  2 ...