IoC小例子(了解一下IoC设计模式入门)

([color=red]说明:本文中除了Kissable,Boy,Girl这几个类借鉴了网络实例,其他组织均为原创[/color])



IoC是 Spring的的核心设计模式之一。要学习IoC机制,当然可以通过搭建一个Spring框架或者SSH(Struts + Spring + Hibernamte)框架来学习。以入门为目的,仅仅体验一下IoC而写一个IoC小例子的话,并非只有在架起的框架结构下才可以,普通的JAVA APPLICATION就可以实现。



苦于自己对IoC设计模式的无知,急需弄个小例子体验一下。通过网上的例子,经过几个小时的琢磨,完成了自己的JAVA Application实现这么一个例子。

[b]步骤如下:[/b]
[color=red]
step 1 .建立如下目录[/color]

D:Temp\IoCTest\src

D:Temp\IoCTest\lib\





[color=red]step 2 .搜索所需资源[/color]

spring-context.jar包(在spring框架lib下可以找到,由于是小例子采用什么版本均可)

spring-support.jar包(在spring框架lib下可以找到)

spring-beans.jar (在spring框架lib下可以找到)

spring-core.jar (在spring框架lib下可以找到)

commons-logging.jar(struts框架的lib下可以找到)

将以上jar包放于step 1 中的D:Temp\IoCTest\lib\目录下。



[color=red]step 3 .写JAVA代码[/color]



写一个接口Kissable:

interface Kissable
{
void kiss( Object kisser);
}



建立一个实现上述Kissable的类Boy:

class Boy implements Kissable
{
public void kiss( Object kisser)
{
System.out.println("I was kissed by " + kisser);
}
}



建立一个依赖于上述类Boy的类Girl:

class Girl
{
private Kissable kissable;

public Kissable getKissable()
{
return kissable;
}

public void setKissable( Kissable kissable)
{
this.kissable = kissable;
}

public void kissSomeone()
{
kissable.kiss(this);
}
}




编写测试主函数:InterfacesTestCase.java



import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;



public class InterfacesTestCase
{
public static void testKissing()
{
Girl girl = new Girl();
girl.setKissable(new Boy());


girl.kissSomeone();
}

public static void main(String[] args) {

testKissing();
testKissingIoC();

}



// 为了与没有使用IoC设计模式的testKissing函数对比
public static void testKissingIoC()
{
ApplicationContext ctx = new
FileSystemXmlApplicationContext("spring.xml");
Girl girl = (Girl)ctx.getBean("girl");

girl.kissSomeone();
}
}



将以上代码放于step 1 中的D:Temp\IoCTest\src目录下。



[color=red]step 4 .创建spring.xml文件:[/color]

<?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="girl" class="Girl">
<property name="kissable">
<ref local="boy" />
</property>
</bean>
<bean id="boy" class="Boy">
</bean>
</beans>

将其放在D:Temp\IoCTest\下。



[color=red]step 5 . 用Ant(基于java的自动化脚本工具)编译运行我们的程序。build.xml如下:[/color]



<?xml version="1.0" ?>
<project name="ioc" default="build" basedir=".">
<property name="base.dir" value="." />
<property name="src.dir" value="src" />
<property name="lib.dir" value="lib" />
<property name="build.dir" value="classes" />

<path id="myclasspath">
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<!--pathelement location="${build.dir}" /-->
</path>

<target name="init">
<mkdir dir="${build.dir}" />
</target>

<target name="build" depends="init" description="compile the source files">
<javac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" />
<copy todir="${build.dir}" >
<fileset dir="${src.dir}" >
<exclude name="*.java"/>
</fileset>
</copy>
</target>
<target name="run" depends="build">
<java classpathref="myclasspath" classpath="${build.dir}" classname="InterfacesTestCase" fork="true" />
</target>
<target name="clean">
<delete includeEmptyDirs="true">
<fileset dir="${build.dir}" />
</delete>
</target>
</project>




[color=red]step 6 .此时组成如下目录结构:[/color]



└─IoCTest
│ build.xml
│ spring.xml

├─lib
│ commons-logging.jar
│ spring-beans.jar
│ spring-context.jar
│ spring-core.jar
│ spring-support.jar

└─src
Boy.java
Girl.java
InterfacesTestCase.java
Kissable.java



[color=red]step 7 .命令行模式下切换到目录D:\Temp\IoCTest\下[/color]

如果你已经配置了ant_home 和 path变量,那么直接在命令行下运行「ant run」命令即可;如果没有配置ant相关环境变量,可以如下进行配置:

假设你的ant安装目录是:D:\apache-ant\
set ANT_HOME=D:\apache-ant\
set path=%path%;%ANT_HOME%\bin


配置之后,运行「ant run」命令。



运行结果如下(其中有意义的部分已经标记为红色)



[java] [color=red]I was kissed by Girl@14318bb (注:此处为非IoC模式的输出)[/color]
[java] 2008-12-18 16:52:07 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
[java] 信息: Loading XML bean definitions from file [[b][color=red]D:\TEMP\j\ioc\IoCTest\spring.xml[/color][/b]][color=red][b](这里spring.xml文件的路径为什么是IoCTest目录而不是classes目录,因为我的测试类InterfacesTestCase编译完以后是在classes目录下,谁知道为什么,可以告诉我。这里我很不明白。)[/b][/color]
[java] 2008-12-18 16:52:08 org.springframework.context.support.AbstractRefreshableApplicationContext refreshBeanFactory
[java] 信息: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext;hashCode=3327002]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [girl,boy]; root of BeanFactory hierarchy
[java] 2008-12-18 16:52:08 org.springframework.context.support.AbstractApplicationContext refresh
[java] 信息: 2 beans defined in application context [org.springframework.context.support.FileSystemXmlApplicationContext;hashCode=3327002]
[java] 2008-12-18 16:52:08 org.springframework.core.CollectionFactory <clinit>
[java] 信息: JDK 1.4+ collections available
[java] 2008-12-18 16:52:08 org.springframework.context.support.AbstractApplicationContext initMessageSource
[java] 信息: Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@4a5ab2]
[java] 2008-12-18 16:52:08 org.springframework.context.support.AbstractApplicationContext initApplicationEventMulticaster
[java] 信息: Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@e53108]
[java] 2008-12-18 16:52:08 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
[java] 信息: Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [girl,boy]; root of BeanFactory hierarchy]
[java][color=red] I was kissed by Girl@117a8bd (注:此处为IoC模式的输出)[/color]



此时,目录结构为:


└─IoCTest
│ build.xml
│ spring.xml
│ t.txt

├─classes
│ Boy.class
│ Girl.class
│ InterfacesTestCase.class
│ Kissable.class

├─lib
│ commons-logging.jar
│ spring-beans.jar
│ spring-context.jar
│ spring-core.jar
│ spring-support.jar

└─src
Boy.java
Girl.java
InterfacesTestCase.java
Kissable.java



完毕。以上例子经测试可以运行,有兴趣的朋友可以看一下。觉得写的已经够详细了。

源代码可以从附件中下载,问题有的话,email:lingyunlujixin@163.com。Thanks。

注:转载请标明文章出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值