• Java基础系列之五:Spring使用入门示例


    Java世界有一件事情需要习以为常,就是经常会跑出一堆缩写、概念出来,什么SpringStrutsHibernate等等等等,这种情况谈不上好,你得花时间熟悉;也不能说是缺点,毕竟它带来新鲜跟乐趣。 

    最近稍微接触了一些Spring的皮毛,写了个例子,希望对初初初学者有用,高手指正。

     

    1Spring是什么

    网上对Spring以及使用Spring的好处的解释铺天盖地,常常是各个网站之间互相拷贝,而且还引入了一堆的缩写,什么IoCAOP…… 

    我觉得对跟我一样的初学者而言,可以这么理解:Spring是基于反射机制写的一些包,有了它以后你可以将类的实例化写到一个配置文件里,由相应的Spring包负责实例化。 

    假设你有一个类A,以前你实例化时要写A a = new A(),现在不用了,你只要写一个xml文件,并按Spring指定的格式配置好,它就能通过反射机制将A的实例返回给你。 

    至于使用Spring的好处,我会在下面的实例中提到。

     

    2. 下载Spring

    http://www.springsource.org/download,目前最新的版本是3.0.2。进入下载页面可以看到:

    spring-framework-3.0.3.RELEASE-dependencies.zip

    (sha1)

    155.7 MB

    spring-framework-3.0.3.RELEASE-with-docs.zip

    (sha1)

    45.0 MB

    spring-framework-3.0.3.RELEASE.zip

    (sha1)

    21.4 MB

    我第一次下载的是with-docs.zip,觉得解压后看了一下,Spring自身的jar应该是都有了,不过在后面的程序编译时出现:

    Exception   in   thread   "main"  java.lang.NoClassDefFoundError:   org/apache/commons/logging/LogFactory

    没有找到相关的jar包,后来尝试下载dependencies.zip并在里面找到了com.springsource.org.apache.commons.logging-1.1.1.jar包。 

    总而言之,我也不知道它们这些release包是怎么组织起来的,汗。

     

    3. 编写示例

    示例包含一个接口IProgrammingLanguage,用于表示编程语言,两个类JavaLanguagePerlLanguage实现该接口用于表示特定的编程语言JavaPerl 

    另外有一个Developer类,用于表示IT开发者。最后,是程序入口所在的Main类。

     

    3.1.接口IProgrammingLanguage.java

     

    package example;
     
    public interface IProgrammingLanguage {
        
    public String whoAmI();
    }

     

    3.3.JavaLanguage.java

     

    代码
    package example;
     
    public class JavaLanguage implements IProgrammingLanguage {
     
        @Override
        
    public String whoAmI() {
            
    // TODO Auto-generated method stub
            return "Java";
        }   
    }

     

    3.3PerlLanguage.java

     

    代码
    package example;
     
    public class PerlLanguage implements IProgrammingLanguage {
     
        @Override
        
    public String whoAmI() {
            
    // TODO Auto-generated method stub
            return "Perl";
        }
    }

     

    3.4Developer.java

    (这个类用于描述一个开发人员,它包含一个IProgrammingLanguage类型的成员,用于表示该开发人员所使用的编程语言。在Eclipse中选中该成员,右键—Source—Generate Getters and Setters…则可以自动生成相应的getset方法,一开始我并没有去生成这些,但在运行时出错,提示缺少getset方法。)

     

    代码
    package example;
     
    public class Developer {
        
    public IProgrammingLanguage language;
     
        
    /**
         * 
    @return the language
         
    */
        
    public IProgrammingLanguage getLanguage() {
            
    return language;
        }
     
        
    /**
         * 
    @param language the language to set
         
    */
        
    public void setLanguage(IProgrammingLanguage language) {
            
    this.language = language;
        }
     
        
    public String  getCurrentUsingLanguage() {
            
    return language.whoAmI();
        }
    }

     

    3.5.添加引用

    org.springframework.core-3.0.2.RELEASE.jar

    org.springframework.beans-3.0.2.RELEASE.jar
    com.springsource.org.apache.commons.logging-1.1.1.jar

     

    3.6hellospringworld.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="LanguageBean" class="example.PerlLanguage">
      
    </bean>
      
    <bean id="DeveloperBean" class="example.Developer">
        
    <property name="language" ref="LanguageBean"/>
      
    </bean>
    </beans>

    3.7Main.java

     

    代码
    package example;
     
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.Resource;
     
    public class Main {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Resource r = new FileSystemResource("hellospringworld.xml");
            BeanFactory f = new XmlBeanFactory(r);
            Developer d = (Developer) f.getBean("DeveloperBean");
            String s = d.getCurrentUsingLanguage();
            System.out.println("The developer is currently using: "+s);
        } 
    }

     

    运行此程序可以看到输出是:

    The developer is currently using: Perl

     

    现在,假设有一天这个Developer不使用Perl而改用Java了,我们需要做什么?我们并不需要改程序,只需要修改xml文件就行了。

    <bean id="LanguageBean" class="example.PerlLanguage"></bean>

    改成

    <bean id="LanguageBean" class="example.JavaLanguage"></bean>

     

    这就是我目前所理解的使用Spring的好处,即解耦,减少不同的类之间的耦合性。 

    当然,现在的Spring已经日渐复杂跟强大,其中很多特性我并没有使用过,上面所说都是些粗浅的理解,等待以后使用的过程中有更加深入的认识。

     

    4.源码下载

    hellospringworld.zip

     

  • 相关阅读:

    转:在自己的工具条中使用ArcGIS Engine提供的命令和工具
    配置Subversion Apache TortoiseSVN
    vc++2005移除自定义向导目录
    NetAdvantage2006 For ASP.NET2.0印象
    三天了!今天终于成功安装ArcIMS9.2!
    vss 去除源代码管理
    转:设计模式趣谈
    转一篇:有关项目报告
    演练:使用 Visual Studio Team Test 进行单元测试
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/1731881.html
Copyright © 2020-2023  润新知