首先来解释一下什么事IOC:
IoC就是Inversion of Control,控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
IoC(Inversion of Control)模式并不是什么新的东西,它是一种很普遍的概念,依赖注入(Dependency Injection)是Martin Flower对IoC模式的一种扩展的解释[2]。IoC是一种用来解决组件(实际上也可以是简单的Java类)之间依赖关系、配置及生命周期的设计模式,其中对组件依赖关系的处理是IoC的精华部分。IoC的实际意义就是把组件之间的依赖关系提取(反转)出来,由容器来具体配置。这样,各个组件之间就不存在hard-code的关联,任何组件都可以最大程度的得到重用。运用了IoC模式后我们不再需要自己管理组件之间的依赖关系,只需要声明由容器去实现这种依赖关系。就好像把对组件之间依赖关系的控制进行了倒置,不再由组件自己来建立这种依赖关系而交给容器(Spring)去管理。
详细看一下Spring中它的实现。
Spring中IOC贯穿了其整个框架,但正如martinflower所说:“saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels”,IOC已经称为框架设计中必不可少的部分。就实现上来讲Spring采取了配置文件的形式来实现依赖的注射,并且支持Type2 IOC(Setter Injection)以及Type3 IOC(Constructor Injection)。
Spring中IOC的实现的核心是其Core Bean Factory,它将框架内部的组件以一定的耦合度组装起来,并对使用它的应用提供一种面向服务的编程模式(SOP:Service-Orient Programming),比如Spring中的AOP、以及持久化(Hibernate、ibatics)的实现。
首先从最底层最基础的factory Bean开始,先来看org.springframework.beans.factory.Bean
Factory接口,它是一个非常简单的接口,getBean方法是其中最重要的方法,Spring通常是使用xml来populate Bean,所以比较常用的是XMLFactoryBean。
用一个简单的示例看一下其用法。首先写下两个Bean类:
ExampleBean 类:
public class ExampleBean {
private String psnName=null;
private RefBean refbean=null;
private String addinfo=null;
public String getAddinfo() {
return getRefbean().getAddress()+getRefbean().getZipcode();
}
public String getPsnName() {
return psnName;
}
public void setPsnName(String psnName) {
this.psnName = psnName;
}
public void setRefbean(RefBean refbean) {
this.refbean = refbean;
}
public RefBean getRefbean() {
return refbean;
}
public void setAddinfo(String addinfo) {
this.addinfo = addinfo;
}
}
RefBean类:
public class RefBean {
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
private String zipcode=null;
private String address=null;
}
其xml配置文件 Bean.xml
< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
< beans>
< bean id="exampleBean" class="test.ExampleBean">
< property name="psnName">xkf
< property name="refbean">
< ref bean="refBean"/>
< /property>
< /bean>
< bean id="refBean" class="test.RefBean">
< property name="address">BeiJing
< property name="zipcode">100085
< /bean>
< /beans>
然后可以写个测试类来测试,当然,需要Spring中的Spring-core.jar以及commons-logging.jar,当然在elipse中可以通过安装spring-ide插件来轻松实现。
public class Test {
public static void main(String[] args){
try{
Resource input = new ClassPathResource("test/Bean.xml");
System.out.println("resource is:"+input);
BeanFactory factory = new XmlBeanFactory(input);
ExampleBean eb =
(ExampleBean)factory.getBean("exampleBean");
System.out.println(eb.getPsnName());
System.out.println(eb.getAddinfo());
}
catch(Exception e){
e.printStackTrace();
}
}
这样,通过BeanFactory的getBean方法,以及xml配置文件,避免了在test类中直接实例化ExampleBean,消除了应用程序(Test)与服务(ExampleBean)之间的耦合,实现了IOC(控制反转)或者说实现了依赖的注射(Dependency Injection)。
分享到:
相关推荐
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
Spring IoC实现Spring IoC实现Spring IoC实现Spring IoC实现
创建Priter类和pater类,分别代表打印机和纸张,然后利用Spring的IoC对打印机进行组装,分别实现A4纸打印和b5纸打印。
Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc
该代码主要用于spring IOC的实现(墨者革离),模拟一个城门叩问的编剧场景
Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计.doc
SpringIOC和AOP实现机制模拟,来自与网络。
Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等).doc
这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
Spring容器的原理 其实就是通过解析xml文件 通过反射创建出我们所需要的bean 再将这些bean挨个放到集合中 然后对外提供一个getBean 方法 以便我们获得这bean
简洁版的spring ioc自行实现,不到10个类,描述了加载机制,是研究IOC DI的好材料,能够了解IOC原理。目标是了解基本原理,所以没考虑循环引用的情况 完整的ECLIPSE工程,直接导入就可使用。 里面有测试例子,单步...
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
NULL 博文链接:https://lgd-java2eye.iteye.com/blog/759878
Spring-IOC的简单实现,包括注解和注解解析,欢迎大家拍砖~!
以excel导入为例子,看看springIoc是什么原理,如何自己写一个
我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring的IoC——从一个...
手写SpringIoc的XML实现方式,仿照Spring底层Bean工厂类实现ClassPathXmlApplicationContext
Spring通过注解实现IOC,Spring通过注解实现IOC,Spring通过注解实现IOC
spring IOC实现的WEB小例子程序,有JAR包。导入直接可运行