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

IoC(Inversion of Control)控制反转,对象创建责任的反转,在springBeanFacotoryIoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。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 对象的引用。

posted @ 2017-03-18 09:04  sky丶尕少  阅读(333)  评论(0编辑  收藏  举报