老兄,快来一起过春天!(一)

      很有趣,spring 中文理解可为“春天”。
    2005 java中间件世界由于spring横空出世,重量级EJB应用似乎岌岌可危,各种轻量级应用如: PicoContainer、Avalonwei已经微不足道了。转瞬过了3年,spring亦从2.0披上了2.5战衣,而3.0也引人侧目、呼之欲出,java的春天渐有横扫六合之霸王之相。
      那么,spring中微醉的暖风,你可曾感觉到了?其实我跟你一样,听了3年spring如何如何,牛皮终究也会吹一点,终究是见过猪跑的。但今天,我下决心不能只看小猪跑跑,我要尝尝猪肉,体验一下春天到底是如何温暖、温馨。

    Spring的一些资源:
    dwon地址:http://www.springframework.org/download  下载 spring-framework-2.0.8.zip 版本,共

    先看下载得到的spring的目录:
    解压后打开文件夹,看到2个文件夹:dist为主要code包,doc为文档包。下面有一份非常详尽Spring Framework开发团队提供的文档,为英文版,中文版在CSDN或迅雷都可找到。
   dist下有modules包(放置spring与其他java框架结合需要的模块jar包)、resources包(放置spring资源包)、weavers包(放置外部依赖包)
    
   接着试着用Spring写一个Hello Word看看
   使用MyEclipse新建Web工程,导入Spring 2.0 Core包,如用Eclipse可将spring-framework-2.0.8 中 spring.jar 包复制到/WEB/INF lib下作为工程引用。我是懒人,比较喜欢偷偷用MyEclipse,希望国安部别来找我 .....
    导入结束开始建立以下目录结构:   
 
     

 

 

  可看到src下有applicationContext.xml文件生成,Eclipse可自己新建。

   打开applicationContext.xml,找到<Beans></Beans>节点,在节点中添加一个<Bean></Bean>节点,具体如下:

 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3.     xmlns="http://www.springframework.org/schema/beans"
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  6.     <bean id="hello" class="com.testspring.dao.impl.TestSpringImpl">
  7.         <property name="hello" value="Hello Word"></property>
  8.     </bean>
  9. </beans>

   接下来在dao包中新建一个接口:ITestSpring.java

  

  1. package com.testspring.dao;
  2. public interface ITestSpring {
  3.     public String say();
  4.     public String getHello();
  5.     public void setHello(String name);
  6. }

   再在dao包中新建接口实现包impl ,包中新建类:TestSpringImpl.java

  1. package com.testspring.dao.impl;
  2. import com.testspring.dao.ITestSpring;
  3. public class TestSpringImpl implements ITestSpring {
  4.     
  5.     private String hello;
  6.     public TestSpringImpl(){        
  7.     }
  8.     public String say(){
  9.         return "Spring return :" + this.getHello();
  10.     }
  11.     public String getHello() {
  12.         return hello;
  13.     }
  14.     public void setHello(String hello) {
  15.         this.hello = hello;
  16.     }
  17.     
  18. }

   回过头来,在main包中新建类:HelloWord.java

 

 

  1. package com.testspring.main;
  2. import org.springframework.beans.factory.xml.XmlBeanFactory;
  3. import org.springframework.core.io.ClassPathResource;
  4. import com.testspring.dao.ITestSpring;
  5. public class HelloWord {
  6.     public static void main(String[] args){
  7.         XmlBeanFactory bean = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
  8.         ITestSpring spring =(ITestSpring)bean.getBean("hello");
  9.         System.out.println(spring.say());
  10.         bean.destroySingletons();
  11.     }
  12.     
  13. }

   自此,Spring的HelloWord小例子完成,把HelloWord作为javaApplication程序运行。

 

   applicationContext.xml分析:

   applicationContext.xml ,这个文件对于spring开发十分重要,他自Spring的BeanFactory继承而来,却扩展了更多功能,如与Struts、JSF等流行框架的整合;整体或声明式事务的管理;JMS的管理等等。   

   如作为web工程,一般在Web工程启动时,会在Web.xml中读取这个文件,将Beans节点中声明的bean通过class读取到内存中,而每次代码用 XXX.getBean("xxx") 通过反射得到一个Bean 时,都会通过BeanFactory获得这个Bean来进行处理。

   web.xml : 

  1. <context-param>
  2.         <param-name>contextConfigLocation</param-name>
  3.         <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  4.     </context-param>
  5.     <listener>        
  6.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7.     </listener>

   这种方式称为Spring独有的组件装配方式: 依赖注入 

   依赖注入有三种方式  1:xml注入,大部分人都用  2:构造函数注入   3:接口注入(不推荐)

   具体的依赖注入资料参见:http://blog.csdn.net/xiaoranchenxi/archive/2008/06/01/2466639.aspx

   xml解释:

    //xml定义了用hello作为类com.testspring.dao.impl.TestSpringImpl的引用id,业务类可用beanFactory.getBean('hello")来获取类的实例。

   <bean id="hello" class="com.testspring.dao.impl.TestSpringImpl">

    //表示在TestSpringImpl类中,有属性hello,xml定义了他的初始值为Hello Word,当然可以不预设,则为null。也可设为boolean、int、甚至List、Map、url 等各种资源,但如spring不能将value自动转换,会抛出转换异常。

    <property name="hello" value="Hello Word"></property>

 

 

   TestSpringImpl.java 分析:

    public String say(){
         return "Spring return :" + this.getHello();
    }

    say方法返回字符串,而this.getHello()取得本类的hello属性,此属性在applicationContext.xml中已定义为HelloWord,而xml又在HelloWord.java 的main方法上下文中初始化了,因此最后返回的结果为:Spring return :Hello Word 。

 

   HelloWord.java 分析:

       // 这是通过Spring提供的XmlBeanFactory类,查找写好的XML配置文件注入用beans中的类实例。

       XmlBeanFactory bean = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

       //applicationContext.xml 中每个bean都有自己的id,XxmlBeanFactory通过id反射获取bean中声明好的class实例

       ITestSpring spring =(ITestSpring)bean.getBean("hello");

       //显示bean实例中的say方法结果,

       System.out.println(spring.say());

       //目的达到,注销掉spring的beanfactory(java垃圾机制处理)

       bean.destroySingletons();

 

   在 ITestSpring spring =(ITestSpring)bean.getBean("hello");以后,可以通过spring.setHello("xxx")更改ITestSpring实现类的hello属性值,从而改变applicationContext.xml 预设好的结果。

 

   最终 , Helloword写好 打印出:

   Spring return :Hello Word

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值