IOC(Inversion of Control) ,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
如下面的程序:
public class PersonServiceBean { private PersonDAO personDAO = new PersonDAOBean(); public void save() { personDAO.add(); } }
PersonDaoBean 是在应用内部(即PersonServiceBean类)创建及维护的。
当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean 类可以改成如下:
package org.spring.service.impl; import org.spring.dao.PersonDAO; import org.spring.service.PersonService; public class PersonServiceBean implements PersonService { //实现接口编程,PersonServiceBean不负责依赖对象的创建及维护, //依赖对象的创建及维护是由外部容器(这里指的是spring容器)负责的 private PersonDAO personDAO; public PersonDAO getPersonDAO() { return personDAO; } public void setPersonDAO(PersonDAO personDAO) { this.personDAO = personDAO; } public void save() { personDAO.add(); } }
PersonService接口:
package org.spring.service; public interface PersonService { public void save(); }
PersonDAO接口:
package org.spring.dao; public interface PersonDAO { public void add(); }
PersonDAOBean实现类:
package org.spring.dao.impl; import org.spring.dao.PersonDAO; public class PersonDAOBean implements PersonDAO { public void add() { System.out.println("执行PersonDAOBean中的增加方法!"); } }
当然为了能让容器能管理我们的bean,我们还需要在spring中做如下配置:
<?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-2.5.xsd"> <bean id="personDAOBean" class="org.spring.dao.impl.PersonDAOBean" /> <bean id="personServiceBean" class="org.spring.service.impl.PersonServiceBean"> <property name="personDAO" ref="personDAOBean" /> </bean> </beans>
Spring容器在启动后,就会对配置文件中的所有bean进行初始化,并且把id为personDAO的bean注入到id为personServiceBean的bean中,这样personServiceBean就不用负责对personDAObean的创建及维护了,这项工作在容器初始化时就已经完成了,配置文件中的property中的name属性指的是id为personServiceBean的bean中有一个setPersonDAO方法。
测试类:
package org.spring; import org.junit.Test; import org.spring.service.PersonService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringTest { @Test public void test() { ApplicationContext ctx = new ClassPathXmlApplicationContext( "spring.xml"); PersonService personService = (PersonService) ctx .getBean("personServiceBean"); personService.save(); } }
控制台打印结果如下:
工程目录结构图:
相关推荐
SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码
Spring4 IOC 示例源码, 包含演示代码,以及所有涉及到的jar包。
SpringIOC示例源代码,包括bean.xml配置文件等信息。
Spring的Aop和Ioc示例代码,代码通过了调试的,没得问题.对于初学者理解和使用Spring的Aop和Ioc是够了.
Spring IoC简单示例,使用注解配置依赖注入,使用Maven构建项目 Maven使用及SpringIoC教程参考我的Blog:http://blog.csdn.net/boyazuo
创建Priter类和pater类,分别代表打印机和纸张,然后利用Spring的IoC对打印机进行组装,分别实现A4纸打印和b5纸打印。
Spring IoC简单示例,使用XML配置依赖注入,使用Maven构建项目 Maven使用及Spring IoC教程参考我的Blog:http://blog.csdn.net/boyazuo
Spring IOC AOP学习示例代码,包含Spring常用操作示例和所有所需jar文件。参考博客:http://blog.csdn.net/daijin888888/article/details/51735291
包含了spring的ioc,aop,任务调度,cxf、jws示例以及邮件发送跟任务调度。里面包含了需要用到的jar包以及xml配置文件。还有示例代码。很方便学习
spring2.5.6注解以及xml两个简单ioc入门示例项目,导入项目可运行。 同时带有spring-framework-2.5.6-with-docs.zip包
《Java语言的反射机制.pdf》资料书,示例源代码JAVA+Spring,初学java反射者可以看看
主要介绍了简单理解Spring之IOC和AOP及代码示例,具有一定参考价值,需要的朋友可以了解下。
写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...
MyBatis 基于注解的增删改查示例程序,使用Spring的IOC机制注入,降低程序间的耦合性
MyBatis 基于Mapper的增删改查示例程序,使用Spring的IOC机制注入,大大降低程序间的耦合性
主要介绍了Spring为IOC容器注入Bean的五种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Spring.Net IOC依赖注入原理流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...
主要给大家介绍了Spring IOC基于注解启动的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧