`
lingyunlujixin
  • 浏览: 17328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
(说明:本文中除了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。

注:转载请标明文章出处。
2
0
分享到:
评论

相关推荐

    JavaEE Spring IoC入门

    Spring MVC提供了一种模型-视图-控制器的设计模式,使得开发者可以更方便地处理HTTP请求、路由、数据绑定和视图渲染。 XML配置文件在Spring中起着至关重要的作用。在早期的Spring版本中,XML配置是最常见的声明依赖...

    Spring Ioc(依赖注入)入门例子--属性注入

    IoC是设计模式中的一个概念,它改变了传统程序设计中对象之间的依赖关系创建方式。在没有IoC的情况下,对象通常会自行创建其依赖的对象实例,而IoC容器则负责管理这些依赖,使得开发者无需在代码中硬编码依赖对象的...

    Spring中IoC的入门实例

    Spring中的IoC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理权交给框架处理,使得应用程序的组件之间解耦。在本例中,我们将通过一个简单的例子来理解如何在Spring中使用IoC。 首先,...

    poco capsule ioc框架

    而Inversion of Control(IoC,控制反转)作为一种设计原则,正是为了达到这一目标而诞生的。IoC的核心理念在于将控制权从应用程序转移到一个容器中,从而使程序的各个部分更加独立、灵活。 IoC通常与依赖注入...

    Castle IOC容器详解

    在软件开发中,IOC(Inversion of Control,控制反转)是一种设计模式,它改变了传统程序中的控制流程,使得应用程序的组件不再自行管理其依赖关系,而是由一个外部容器(如 Castle Windsor)负责管理和注入。...

    ssm框架学习入门例子

    这个"ssm框架学习入门例子"是一个理想的起点,它可以帮助你了解这三大框架如何协同工作。 首先,我们从Spring框架开始。Spring是企业级应用开发的基石,通过IoC(Inversion of Control)和AOP(Aspect-Oriented ...

    MVVM-Prism入门小例子,很实在的

    MVVM是一种软件设计模式,它在UI开发中被广泛应用,尤其是在WPF、Xamarin.Forms和UWP等.NET平台中。该模式将用户界面(View)、业务逻辑(ViewModel)和数据模型(Model)分离,使代码更加可维护、可测试和可扩展。 ...

    jsf2+hibernate+spring入门小例子

    这是一个基于Java技术栈的入门教程,主要涵盖了JSF2(JavaServer Faces 2.0)、Hibernate ORM框架和Spring框架的整合应用。这三个组件是企业级Java开发中的关键部分,它们一起构建了一个完整的MVC(Model-View-...

    Spring.Net控制反转IoC入门使用

    控制反转是一种设计模式,它将对象的创建和依赖关系的管理从应用代码中解耦出来。通过IoC,对象不再负责创建和管理其依赖项,而是由一个外部容器(如Spring.NET的ApplicationContext)来负责。这使得系统更加灵活,...

    spring mvc例子

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,专为构建 MVC(Model-...通过学习和实践这个入门级别的 Spring MVC 示例,你可以掌握基础的 MVC 设计模式以及 Spring 框架的关键概念。

    基于SSH的小例子l

    总之,"基于SSH的小例子"是一个综合性的学习材料,涵盖了Web开发中常用的三大框架,对于Java开发者来说,无论是入门还是进阶,都具有很高的参考价值。通过这个项目,开发者可以深入理解SSH框架的工作原理,并将其...

    入门ssm事例

    Struts2是一个基于MVC设计模式的Web应用框架,用于简化开发Java Web应用程序。它负责处理HTTP请求,将请求分发到相应的Action,然后Action执行业务逻辑并返回结果视图。Struts2通过配置文件或注解定义Action及其对应...

    spring快速入门教程

    IOC是一种设计模式,它将对象的创建和管理权交给了框架,而不是由对象自身负责。在Spring中,这一理念体现在通过容器来管理对象的生命周期和依赖关系。这样,开发者不再需要手动创建和管理对象,而是通过配置文件...

    项目开发入门:Java_EE框架集成.ppt

    在 Java EE 框架中,工厂模式是一种常用的设计模式,它可以用来创建对象。工厂模式的原理是,定义一个工厂接口,通过这个接口可以创建不同的对象,而不需要关心对象的创建细节。在上面的例子中, WriterFactory 工厂...

    Spring从入门到精通

    - **反向控制(IoC):** IoC是一种设计模式,用于实现解耦,使得一个对象不直接控制其依赖项的创建,而是通过第三方容器来创建并注入这些依赖。 - **依赖注入(DI):** DI是IoC的具体实现之一,允许对象在其创建...

    三大框架 小例子

    1. **Struts**:这是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于处理Web应用程序的业务逻辑。Struts将请求分发到控制器,控制器再与模型进行交互,最终更新视图。Struts通过ActionForm对象...

    ssha框架简单例子

    2. **Struts**:Struts是基于MVC(Model-View-Controller)设计模式的Web应用程序框架,它使得开发Java Web应用更加容易。在例子中,Struts将处理HTTP请求,调用业务逻辑,然后更新视图。 3. **Hibernate**:...

    springtest.rar

    控制反转是一种设计模式,它将对象的创建和管理的责任从应用代码转移到外部容器,即Spring IoC容器。这样,开发者可以专注于业务逻辑,而无需关注对象的生命周期和依赖关系。在Spring中,IoC通过配置元数据(如XML或...

Global site tag (gtag.js) - Google Analytics