控制反转和依赖注入讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入:

  是指在运行期,由外部容器动态地将依赖对象注入到组件中。当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它。所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。这种现象就称作控制反转,即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

  下面介绍各种类型属性的注入方式:

  新建实体类Student:

public class Student {

    //基本数据类型的变量
private String name;
//对象类型的变量,Address类代码省略
private Address address;
//数组类型的变量
private String[] hobby;
//list类型的变量
private List<String> books;
//Map类型的变量
private Map<String,String> cards;
//set类型的变量
private Set<String> movies;
//Properties类型的变量
private Properties info;
public void show(){
System.out.println("name:"+name+"地址:"+address.getAddr());
System.out.println("爱好有:");
for(int i=0;i<hobby.length;i++){
System.out.println(hobby[i]);
}
System.out.println("喜欢的书籍:"+books);
System.out.println("拥有的银行卡"+cards);
System.out.println("喜欢的电影"+movies);
System.out.println("身份信息:"+info);
}
//set方法省略
}

配置文件beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="address" class="com.wang.entity.Address">
<property name="addr" value="青岛"></property>
</bean>
<bean id="student" class="com.wang.entity.Student">
<!--配置基本数据类型 -->
<property name="name" value="张三丰"></property>
<!--配置对象类型 -->
<property name="address" ref="address"></property>
<!--配置数组类型 -->
<property name="hobby" >
<array>
<value>吃饭</value>
<value>睡觉</value>
<value>打豆豆</value>
</array>
</property>
<!--配置list类型 -->
<property name="books">
<list>
<value>时光旅行者的妻子</value>
<value>白发魔女传</value>
<value>谁的青春不迷茫</value>
</list>
</property>
<!--配置map类型 -->
<property name="cards">
<map>
<entry key="农行卡" value="62284832128534"></entry>
<entry key="建行卡" value="62284867867984"></entry>
</map>
</property>
<!--配置set类型 -->
<property name="movies">
<set>
<value>疯狂动物城</value>
<value>叶问3</value>
<value>功夫熊猫</value>
</set>
</property>
<!--配置properties类型-->
<property name="info">
<props>
<prop key="学号">20124280</prop>
<prop key="班级">三年二班</prop>
<prop key="性别">不详</prop>
</props>
</property>
</bean>
</beans>

测试代码:

@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
Student s=(Student)context.getBean(Student.class);
s.show();
}

打印结果:

name:张三丰地址:青岛
爱好有:
吃饭
睡觉
打豆豆
喜欢的书籍:[时光旅行者的妻子, 白发魔女传, 谁的青春不迷茫]
拥有的银行卡{农行卡=62284832128534, 建行卡=62284867867984}
喜欢的电影[疯狂动物城, 叶问3, 功夫熊猫]
身份信息:{学号=20124280, 性别=不详, 班级=三年二班}

spring笔记--依赖注入之针对不同类型变量的几种注入方式的更多相关文章

  1. Spring Boot将Mybatis返回结果转为驼峰的三种实现方式

    本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:Spring Boot将Mybatis返回结果转为驼峰的三种实现方式: 我们通常获取Mybatis返回的数据结果时想要将字段以驼峰的形式返回 ...

  2. Spring笔记——依赖注入

    依赖注入有三种方式: 1. 使用构造器注入  2. 使用属性setter方法注入 3. 使用Field注入(用于注解方式) 注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自 ...

  3. spring mvc:拦截器不拦截静态资源的三种处理方式

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  4. spring事务详解(基于注解和声明的两种实现方式)

    Spring事务( Transaction ) 事务的概念 事务是一些sql语句的集合,作为一个整体执行,一起成功或者一起失败. 使用事务的时机 一个操作需要多天sql语句一起完成才能成功 程序中事务 ...

  5. spring bean的init 方法和 destory方法的三种实现方式

    1.通过@Bean(initMethod ="initPerson",destroyMethod ="destroyPerson" ) public class ...

  6. Spring的三种注入

    在学习Spring的过程中,其中一个很重要的就是依赖注入DI,在此总结一下 注入方式有三种: 一.构造器注入 二.Set方式注入(重点) 三.扩展方式注入 构造器注入: a.默认使用无参构造函数创建对 ...

  7. Spring学习笔记--依赖注入

    依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...

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

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

  9. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

随机推荐

  1. android shape的使用(转)

    shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下: <?xml version="1.0" encoding="ut ...

  2. Xilinx下载安装与在win10闪退问题解决方法

    Xilinx的14.4版本的下载链接(百度云的上传了N多次都提示失败,所以就换了360云盘上传) https://yunpan.cn/cPHKLjbX9RueM (提取码:2a5a)下载后解压到以下目 ...

  3. css自适应宽度高级写法:一行多列~~~某些列的宽度是固定值

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxgAAACdCAIAAAC4iknFAAAgAElEQVR4nO2d3VsTV7uH51/wqhKotn

  4. Kafka设计解析(三)- Kafka High Availability (下)

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/06/08/KafkaColumn3 摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机 ...

  5. java 过滤器Filter

    一.首先在web.xml里进行拦截过滤 <filter>        <filter-name>platformServiceAgreementFilter</filt ...

  6. GiuHub 使用

    一 Mac 能不能连接安卓手机 1 USB数据线  设置 > 通用 > 开发人员选项 > USB调试 > 选择"相机PTP模式"  连接后,手机中的照片和视 ...

  7. Ajax是如何运行的?

    1.我们需要知道什么是Ajax: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现 ...

  8. Quartz 2D在ios中的使用简述二:创建画布

    在iOS中使用Quartz画图时,第一步就是要获取画布(图形上下文),然后再画布上做各种操作.先看下CoreGraphics.h这个头文件,就可以知道能够创建多少种上下文类型. #include &l ...

  9. Mono 3.0.12 支持可移植类库

    Mono 3.0.12已于6月19日发布.对跨平台开发者而言,对可移植类库的支持可能是该版本最重要的变化.该技术可以使一个DLL支持.NET.Windows Store.Windows Phone.S ...

  10. Logging with Debug And Trace (一)

    对于一个应用程序而言,Log 必不可少. 在.net 里面,最简单的方式就是用Console 来输出 信息了,例如下面的例子: public class Program { public static ...