Spring IoC(控制反转)
2013-11-01 09:28
232 查看
在Spring中IOC(控制反转)是通过使用DI(依赖注入)设计默认实现的,那么什么是依赖注入呢,所谓依赖注入即是指将调用类对接口实现类的依赖关系由第三方注入,
取消调用类对接口实现类的依赖关系。通过一个简单的例子来帮助我们理解依赖注入。
首先定义一个接口,里面只有一个QuizMaster方法
然后我们定义两个类实现popQuestion方法,一个是StrutsQuizMaster类,一个是SpringQuizMaster类:
我们在新建一个QuizMasterService类,他持有QuizMaster的引用,显示信息给用户。
现在我们就需要使用容器来注入相关的值,beans.xml文件内容如下:
现在我们来通过QuizProgram测试一下。
执行结果:
也就是说我们可以通过第三方xml文件来为我们的调用接口类进行实例话,这就增加了代码的灵活性,如果现在我们希望的是SpringQuizMaster,那么我们只需要修改下beans.xml文件。
执行行的就是SpringQuizMaster实现的方法。下面是注入值的框架图。
![](http://hi.csdn.net/attachment/201112/29/0_1325119861j0Um.gif)
从图上显然很容易看出相应的关系。
取消调用类对接口实现类的依赖关系。通过一个简单的例子来帮助我们理解依赖注入。
首先定义一个接口,里面只有一个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实现的方法。下面是注入值的框架图。
![](http://hi.csdn.net/attachment/201112/29/0_1325119861j0Um.gif)
从图上显然很容易看出相应的关系。
相关文章推荐
- Spring IoC 控制反转 DI依赖注入 以及常用注解
- Spring IoC(控制反转)之IoC的使用
- Spring IoC(控制反转)【IoC使用实例】
- Spring IoC(控制反转)【三】
- spring IOC(控制反转)浅析
- Spring IOC 反转控制
- 使用spring ioc(控制反转)的两种方法
- Spring IOC(控制反转)详解及示例
- 总结: 十分钟快速理解 Spring IoC 控制反转
- Spring IoC(控制反转)【IoC的技术基础】
- spring ioc(反转控制)
- Spring IOC控制反转 依赖注入DI
- [转]spring IOC 控制反转
- Spring第一天の代码学习(Spring底层依赖注入和控制反转的小例子)
- 用PHP实现简单的控制反转(IOC) 依赖注入(DI),用JSON配置文件
- 控制反转
- Spring基础02--控制反转(IOC)
- 第二节 控制反转和依赖注入
- spring控制反转,依赖注入的理解