<%@ page contentType="text/html; charset=gb2312"%> Spring中IOC的实现
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Spring中IOC的实现
     发布者: 发布时间:2007-09-23
了解了IOC模式的思想以及其优点,再来学习其实现。上篇blog中大致描述了PicoContainer以及Spring各自对IOC的实现,这篇来详细看一下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"><value>xkf</value></property>

<property name="refbean">

<ref bean="refBean"/>

</property>

</bean>

<bean id="refBean" class="test.RefBean">

<property name="address"><value>BeiJing</value></property>

<property name="zipcode"><value>100085</value></property>

</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)。
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
使用Java的动态代理技术实现对象适配器模式
深入浅出Java设计模式之迭代器模式
深入浅出Java设计模式之迭代器模式
Java设计模式之计数代理模式
Java IO 包中的Decorator模式
Java IO 包中的Decorator模式
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(1584)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(1187)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(7877)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(3615)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(3654)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(6152)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(5710)
        
不想在乎你!
dofus kamas,dofus kamas,EVE ISK,dog shoes,pet supply, max(6019)
        
不想在乎你!
dofus kamas,dofus kamas,EVE ISK,dog shoes,pet supply, max(9101)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号