(
说明:本文中除了Kissable,Boy,Girl这几个类借鉴了网络实例,其他组织均为原创)
IoC是 Spring的的核心设计模式之一。要学习IoC机制,当然可以通过搭建一个Spring框架或者SSH(Struts + Spring + Hibernamte)框架来学习。以入门为目的,仅仅体验一下IoC而写一个IoC小例子的话,并非只有在架起的框架结构下才可以,普通的JAVA APPLICATION就可以实现。
苦于自己对IoC设计模式的无知,急需弄个小例子体验一下。通过网上的例子,经过几个小时的琢磨,完成了自己的JAVA Application实现这么一个例子。
步骤如下:
step 1 .建立如下目录
D:Temp\IoCTest\src
D:Temp\IoCTest\lib\
step 2 .搜索所需资源
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\目录下。
step 3 .写JAVA代码
写一个接口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目录下。
step 4 .创建spring.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="girl" class="Girl">
<property name="kissable">
<ref local="boy" />
</property>
</bean>
<bean id="boy" class="Boy">
</bean>
</beans>
将其放在D:Temp\IoCTest\下。
step 5 . 用Ant(基于java的自动化脚本工具)编译运行我们的程序。build.xml如下:
<?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>
step 6 .此时组成如下目录结构:
└─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
step 7 .命令行模式下切换到目录D:\Temp\IoCTest\下
如果你已经配置了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]
I was kissed by Girl@14318bb (注:此处为非IoC模式的输出)
[java] 2008-12-18 16:52:07 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
[java] 信息: Loading XML bean definitions from file [
D:\TEMP\j\ioc\IoCTest\spring.xml]
(这里spring.xml文件的路径为什么是IoCTest目录而不是classes目录,因为我的测试类InterfacesTestCase编译完以后是在classes目录下,谁知道为什么,可以告诉我。这里我很不明白。)
[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]
I was kissed by Girl@117a8bd (注:此处为IoC模式的输出)
此时,目录结构为:
│
└─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。
注:转载请标明文章出处。
分享到:
相关推荐
Spring MVC提供了一种模型-视图-控制器的设计模式,使得开发者可以更方便地处理HTTP请求、路由、数据绑定和视图渲染。 XML配置文件在Spring中起着至关重要的作用。在早期的Spring版本中,XML配置是最常见的声明依赖...
IoC是设计模式中的一个概念,它改变了传统程序设计中对象之间的依赖关系创建方式。在没有IoC的情况下,对象通常会自行创建其依赖的对象实例,而IoC容器则负责管理这些依赖,使得开发者无需在代码中硬编码依赖对象的...
Spring中的IoC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理权交给框架处理,使得应用程序的组件之间解耦。在本例中,我们将通过一个简单的例子来理解如何在Spring中使用IoC。 首先,...
而Inversion of Control(IoC,控制反转)作为一种设计原则,正是为了达到这一目标而诞生的。IoC的核心理念在于将控制权从应用程序转移到一个容器中,从而使程序的各个部分更加独立、灵活。 IoC通常与依赖注入...
在软件开发中,IOC(Inversion of Control,控制反转)是一种设计模式,它改变了传统程序中的控制流程,使得应用程序的组件不再自行管理其依赖关系,而是由一个外部容器(如 Castle Windsor)负责管理和注入。...
这个"ssm框架学习入门例子"是一个理想的起点,它可以帮助你了解这三大框架如何协同工作。 首先,我们从Spring框架开始。Spring是企业级应用开发的基石,通过IoC(Inversion of Control)和AOP(Aspect-Oriented ...
MVVM是一种软件设计模式,它在UI开发中被广泛应用,尤其是在WPF、Xamarin.Forms和UWP等.NET平台中。该模式将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离,使代码更加可维护、可测试和可扩展。 ...
这是一个基于Java技术栈的入门教程,主要涵盖了JSF2(JavaServer Faces 2.0)、Hibernate ORM框架和Spring框架的整合应用。这三个组件是企业级Java开发中的关键部分,它们一起构建了一个完整的MVC(Model-View-...
控制反转是一种设计模式,它将对象的创建和依赖关系的管理从应用代码中解耦出来。通过IoC,对象不再负责创建和管理其依赖项,而是由一个外部容器(如Spring.NET的ApplicationContext)来负责。这使得系统更加灵活,...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,专为构建 MVC(Model-...通过学习和实践这个入门级别的 Spring MVC 示例,你可以掌握基础的 MVC 设计模式以及 Spring 框架的关键概念。
总之,"基于SSH的小例子"是一个综合性的学习材料,涵盖了Web开发中常用的三大框架,对于Java开发者来说,无论是入门还是进阶,都具有很高的参考价值。通过这个项目,开发者可以深入理解SSH框架的工作原理,并将其...
Struts2是一个基于MVC设计模式的Web应用框架,用于简化开发Java Web应用程序。它负责处理HTTP请求,将请求分发到相应的Action,然后Action执行业务逻辑并返回结果视图。Struts2通过配置文件或注解定义Action及其对应...
IOC是一种设计模式,它将对象的创建和管理权交给了框架,而不是由对象自身负责。在Spring中,这一理念体现在通过容器来管理对象的生命周期和依赖关系。这样,开发者不再需要手动创建和管理对象,而是通过配置文件...
在 Java EE 框架中,工厂模式是一种常用的设计模式,它可以用来创建对象。工厂模式的原理是,定义一个工厂接口,通过这个接口可以创建不同的对象,而不需要关心对象的创建细节。在上面的例子中, WriterFactory 工厂...
- **反向控制(IoC):** IoC是一种设计模式,用于实现解耦,使得一个对象不直接控制其依赖项的创建,而是通过第三方容器来创建并注入这些依赖。 - **依赖注入(DI):** DI是IoC的具体实现之一,允许对象在其创建...
1. **Struts**:这是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于处理Web应用程序的业务逻辑。Struts将请求分发到控制器,控制器再与模型进行交互,最终更新视图。Struts通过ActionForm对象...
2. **Struts**:Struts是基于MVC(Model-View-Controller)设计模式的Web应用程序框架,它使得开发Java Web应用更加容易。在例子中,Struts将处理HTTP请求,调用业务逻辑,然后更新视图。 3. **Hibernate**:...
控制反转是一种设计模式,它将对象的创建和管理的责任从应用代码转移到外部容器,即Spring IoC容器。这样,开发者可以专注于业务逻辑,而无需关注对象的生命周期和依赖关系。在Spring中,IoC通过配置元数据(如XML或...