您的位置:首页 > 编程语言 > Java开发

spring IOC --- 控制反转(依赖注入)----简单的实例

2017-03-18 09:04 483 查看
IoC(Inversion of Control)控制反转,对象创建责任的反转,在spring中BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。

spring中有三种注入方式,一种是setter注入,一种是接口注入,另一种是构造方法注入。

使用IoC容器更加容易组合对象直接间关系,面向接口编程,降低耦合。

在不使用spring框架之前,我们的service层中要使用dao层的对象,不得不在service层中new一个对象。如下:

//dao层对象
public class UserDao{
publicvoid insert(User user){}
}

//service层对象
public classUserService{
publicvoid insert(User user){
UserDaouserdao = new UserDao();
userdao.insert(user);
}
}


存在的问题:层与层之间的依赖。

使用框架后:

//dao层对象
public class UserDao{
publicvoid insert(User user){}
}

//service层对象
public classUserService{
privateUserDao userdao;

publicUserDao getUserdao() {
returnuserdao;
}
publicvoid setUserdao(UserDao userdao) {
this.userdao= userdao;
}

publicvoid insert(User user){
userdao.insert(user);
}

}


 service层要用dao层对象需要配置到xml配置文件中,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。

模拟实现

创建需要被依赖(被实例化)的对象:User.java

package com.spring.ioc;

//..忽略input

public class User {
private String userId;
private String userName;
private String userPassword;
private int age;
private List list;
private Set set;
private Map map;

//各自的set、get方法忽略

@Override
public String toString() {
return "User [userId=" + userId + ", userName=" + userName
+ ", userPassword=" + userPassword + ", age=" + age + ", list="
+ list + ", set=" + set + ", map=" + map + "]";
}
}


  

spring配置使用:spring.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" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="userBean" class="com.spring.ioc.User">

<!-- 构造器注入 -->
<constructor-arg index="0">
<value>张大明</value>
</constructor-arg>
<constructor-arg index="1">
<value>88888888</value>
</constructor-arg>

<!-- 属性值注入 -->
<property name="age">
<value type="int">10</value>
</property>

<!-- list注入 -->
<property name="list">
<list>
<value>list1</value>
<value>list2</value>
<value>list3</value>
</list>
</property>
<!-- set注入 -->
<property name="set">
<set>
<value>set1</value>
<value>set2</value>
<value>set3</value>
</set>
</property>
<!-- map注入 -->
<property name="map">
<map>
<entry>
<key>
<value>1</value>
</key>
<value>map1</value>
</entry>
<entry>
<key>
<value>2</value>
</key>
<value>map2</value>
</entry>
<entry>
<key>
<value>3</value>
</key>
<value>map3</value>
</entry>
</map>
</property>
</bean>
</beans>


  

使用spring,依赖User。Text.java

package com.spring.ioc;

//忽略input

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Test {

public static void main(String[] args) {
ApplicationContext applicationContext=new
FileSystemXmlApplicationContext("src/com/spring/ioc/spring.xml");
//可以当做是控制反转的用法ioc
User user=(User)applicationContext.getBean("userBean");
//通过依赖注入(构造器注入)获取的值
System.out.println("userName:"+user.getUserName());
System.out.println("userPassword:"+user.getUserPassword());
System.out.println("age:"+user.getAge());

List list=user.getList();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}

}

}


运行结果:

  


setter方法注入:

  <property name="user2" ref="user23"></property>

<bean id="user23" class="com.spring.ioc.User2">
<constructor-arg name="other">
<value>2</value>
</constructor-arg>
<constructor-arg name="other2">
<value>asd</value>
</constructor-arg>
</bean>


  

 其他代码省略;说明:user2是 user 里的一个成员变量。

此处通过setter方法设置元素的值,user23 属性配置是 user2 对象的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: