依赖注入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基础复习之数组

    Java基础复习之:数组 简介 数组(Array):多个相同数据类型按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理 一维数组 一维数组的声明与初始化 int[] id ...

  2. makefile编译子目录

    make子目录常用方法 一般是 SUB_DIR = lib_src service .PHONY: subdirs $(SUB_DIR) subdirs: $(SUB_DIR) $(SUB_DIR): ...

  3. 开发中常见的@NotNull,@NotBlank,@NotEmpty注解的区别

    开发中常看见@NotNull,@NotBlank,@NotEmpty三个注解,但却没有深入了解过,下面介绍一下他们的应用场景和区别 @NotNull:主要用在基本数据类型上(Int,Integer,D ...

  4. Python进阶(多线程)

    多线程结构 import threading def worker():#子线程要执行的具体逻辑代码函数 print('threading') t1 = threading.current_threa ...

  5. 如何解决 ASP.NET Core 中的依赖问题

    依赖性注入是一种技术,它允许我们注入一个特定类的依赖对象,而不是直接创建这些实例. 使用依赖注入的好处显而易见,它通过放松模块间的耦合,来增强系统的可维护性和可测试性. 依赖注入允许我们修改具体实现, ...

  6. 【Java面试题】-- Java基本类型

    Java基本类型 2019-11-03  19:03:48  by冲冲 1.两个float型相减丢失精度,如何解决? 使用BigDemical装饰器模式 public class Test { pub ...

  7. es的rest风格的api文档

    rest风格的api put http://127.0.0.1:9200/索引名称/类型名称/文档id (创建文档,指定文档id) post http://127.0.0.1:9200/索引名称/类型 ...

  8. mybatis一对多查询resultMap只返回了一条记录

    问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外.就记录下这个问题 准备两个类:author(作者)和book(书),数据库创建对应的author-> ...

  9. NOIOL #2 爆零记

    没有假是真的爆零了,原因:万恶的文操.不管怎样写份题解吧. T1: 做题经历:看了下题发现:不是 edu 的原题吗?兴奋地拿出赛中写的程序搞上去. 大约比赛开始 30min 后开始发现 \(k\) 可 ...

  10. Atcoder Grand Contest 031 D - A Sequence of Permutations(置换+猜结论)

    Atcoder 题面传送门 & 洛谷题面传送门 猜结论神题. 首先考虑探究题目中 \(f\) 函数的性质,\(f(p,q)_{p_i}=q_i\leftarrow f(p,q)\circ p= ...