一,概念描述
Spring IoC 读作为 反转控制 基本意思是将原本在程序中手动创建对象的控制权,交给Spring框架管理。
没有Spring时候属于正控:正如那个时候,我们需要使用某个对象,我们必须手动给对象实例创建或者组装对象之间的依赖关系。
在出现Spring时候属于反转控制:这时候,我们需要使用某个对象,调用者只管负责从Spring容器中获取使用该对象,根本不需要关心创建对象的过程,也不需要依赖对象的创建和组装,最终可以理解为把创建对象和组装对象关系的控制权力交给Spring框架。
正控和反控的对比:
简单解释一下上述图片的含义:
在使用IoC前,我们需要使用对象,必须自己创建,什么事情都得自己做,就如左边图片一样的情景。
在使用IoC后,我们需要使用对象实例,调用者只管跟Spring IOC容器获取,无需关系他创建的过程,就好比右边图片的情景。
二,Spring IoC应用实例
-
先在Ecplice工具上创建一个Java项目,创建lib目录导入Spring所需的jar包依赖,创建DAO层和、和Service层
jar包依赖: -
//DAO接口 package com.iarchie.ioc.dao; public interface TestDAO { void empMsg(String name); } 3//DAO实现类 package com.iarchie.ioc.dao.impl; import com.iarchie.ioc.dao.TestDAO; public class TestDAOImpl implements TestDAO { @Override public void empMsg(String name) { System.out.println("sayHello,Employee="+name); } }
-
//Service 接口 package com.iarchie.ioc.service; public interface TestService { void empMsg(); } //Service 实现 package com.iarchie.ioc.service.impl; import com.iarchie.ioc.dao.TestDAO; import com.iarchie.ioc.service.TestService; public class TestServiceImpl implements TestService { private TestDAO testDAO; //用于Setter属性注入 public void setTestDAO(TestDAO testDAO) { System.out.println("setter方法执行...."); this.testDAO = testDAO; } public TestServiceImpl() { } //用户构造器注入 public TestServiceImpl(TestDAO testDAO) { System.out.println("构造器执行...."); this.testDAO = testDAO; } @Override public void empMsg() { testDAO.empMsg("Lucy"); } }
-
编写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/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置DAO --> <bean id="testDAO" class="com.iarchie.ioc.dao.impl.TestDAOImpl"/> <!-- 配置Service --> <bean id="testService" class="com.iarchie.ioc.service.impl.TestServiceImpl"> <!--通过setTestDAO注入 DAO属性--> <property name="testDAO" ref="testDAO"></property> <!-- 构造器注入 --> <!-- <constructor-arg index="0" ref="testDAO"/> --> </bean> </beans>
5.编写测试
package com.iarchie.ioc; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.iarchie.ioc.service.TestService; @RunWith(SpringJUnit4ClassRunner.class) //上下文配置对象(寻找配置文件的) @ContextConfiguration("classpath:applicationContext.xml") public class AppTest { @Autowired private TestService testService; @Test public void test() { testService.empMsg(); } }
出现如下结果,表示IOC应用程序开发完成
setter方法执行…
sayHello,Employee=Lucy
-
总结