控制反转(Inversion of Control)和依赖注入(Dependency Injection)讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入:
依赖注入(DI)是指在运行期,由外部容器动态地将依赖对象注入到组件中。当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它。所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。这种现象就称作控制反转(Ioc),即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
下面介绍各种类型属性的注入方式:
新建实体类Student:
public class Student {//基本数据类型的变量private String name;//对象类型的变量,Address类代码(只有一个属性 private String addr() setter() getter())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/beanshttp://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>
测试代码:
@Testpublic void test1(){ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");Student s=(Student)context.getBean(Student.class);s.show();}
打印结果:
name:张三丰地址:青岛
爱好有:
吃饭
睡觉
打豆豆
喜欢的书籍:[时光旅行者的妻子, 白发魔女传, 谁的青春不迷茫]
拥有的银行卡{农行卡=62284832128534, 建行卡=62284867867984}
喜欢的电影[疯狂动物城, 叶问3, 功夫熊猫]
身份信息:{学号=20124280, 性别=不详, 班级=三年二班}