Spring IoC(控制反转)

在Spring中IOC(控制反转)是通过使用DI(依赖注入)设计默认实现的,那么什么是依赖注入呢,所谓依赖注入即是指将调用类对接口实现类的依赖关系由第三方注入,         
取消调用类对接口实现类的依赖关系。通过一个简单的例子来帮助我们理解依赖注入。

首先定义一个接口,里面只有一个QuizMaster方法

package com.zcl.spring.di;

public interface QuizMaster {
	public String popQuestion() ;
}

然后我们定义两个类实现popQuestion方法,一个是StrutsQuizMaster类,一个是SpringQuizMaster类:

package com.zcl.spring.di;

public class StrutsQuizMaster implements QuizMaster{

	@Override
	public String popQuestion() {
		return "Are you new to Struts?";
	}
}

package com.zcl.spring.di;

public class SpringQuizMaster implements QuizMaster{
	
	@Override
	public String popQuestion() {
		return "Are you new to Spring?";
	}
}

我们在新建一个QuizMasterService类,他持有QuizMaster的引用,显示信息给用户。

package com.zcl.spring.di;

public class QuizMasterService {
	
	private QuizMaster quizMaster ;
	
	public void setQuizMaster(QuizMaster quizMaster){
		this.quizMaster = quizMaster ;
	}

	public void askQuestion(){
		System.out.println(quizMaster.popQuestion()) ;
	}
}

现在我们就需要使用容器来注入相关的值,beans.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://www.springframework.org/schema/beans"> 
	<bean id="springQuizMaster" class="com.zcl.spring.di.SpringQuizMaster"></bean>
	<bean id="strutsQuizMaster" class="com.zcl.spring.di.StrutsQuizMaster"></bean>
	<bean id="quizMasterService" class="com.zcl.spring.di.QuizMasterService">
		<property name="quizMaster">
			<ref local="strutsQuizMaster"/>
		</property>
	</bean>
</beans>

现在我们来通过QuizProgram测试一下。

package com.zcl.spring.di;

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

public class QuizProgram {
	public static void main(String args[]){
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml") ;
		QuizMasterService quizMasterService = (QuizMasterService)context.getBean("quizMasterService") ;
		quizMasterService.askQuestion() ;
	}
}

执行结果:

Are you new to Struts?

也就是说我们可以通过第三方xml文件来为我们的调用接口类进行实例话,这就增加了代码的灵活性,如果现在我们希望的是SpringQuizMaster,那么我们只需要修改下beans.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://www.springframework.org/schema/beans"> 
	<bean id="springQuizMaster" class="com.zcl.spring.di.SpringQuizMaster"></bean>
	<bean id="strutsQuizMaster" class="com.zcl.spring.di.StrutsQuizMaster"></bean>
	<bean id="quizMasterService" class="com.zcl.spring.di.QuizMasterService">
		<property name="quizMaster">
			<ref local="springQuizMaster"/>
		</property>
	</bean>
</beans>

执行行的就是SpringQuizMaster实现的方法。下面是注入值的框架图。



从图上显然很容易看出相应的关系。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值