loyal_van

专注
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Spring In Action(Hello World)

Posted on 2012-06-26 12:37  loyal_van  阅读(218)  评论(0)    收藏  举报

  基于Spring的系统与一般Java系统不同点在于如何配置类以及如何将它们组合起来。Spring系统用一个XML文件来描述如何配置这些类。下面,以一个简单的Hello World实例来看看如何使用Spring配置类。

  GreetingService接口:

/***********************************************************************
 * $Id: GreetingService.java,v1.0 2012-6-25 下午02:21:00 $
 * 
 * @author: loyal
 * 
 * (c)Copyright 2011 Topvision All rights reserved.
 ***********************************************************************/
package service;

/**
 * @author loyal
 * @created @2012-6-25-下午02:21:00
 *
 */
public interface GreetingService {
    public void sayGreeting();
}

  GreetingService接口实现:

/***********************************************************************
 * $Id: GreetingServiceImpl.java,v1.0 2012-6-25 下午02:22:37 $
 * 
 * @author: loyal
 * 
 * (c)Copyright 2011 Topvision All rights reserved.
 ***********************************************************************/
package service.impl;

import service.GreetingService;

/**
 * @author loyal
 * @created @2012-6-25-下午02:22:37
 *
 */
public class GreetingServiceImpl implements GreetingService{
    private String greeting;
    
    /**
     * 
     */
    public GreetingServiceImpl() {
    }
    
    /**
     * @param greeting
     */
    public GreetingServiceImpl(String greeting) {
        this.greeting = greeting;
    }

    /* (non-Javadoc)
     * @see service.GreetingService#sayGreeting()
     */
    @Override
    public void sayGreeting() {
        System.out.println(greeting);
    }

    /**
     * @return the greeting
     */
    public String getGreeting() {
        return greeting;
    }

    /**
     * @param greeting the greeting to set
     */
    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }
    
    
}

  接口与实现分离

  测试类HelloWordApp:载入Spring容器并且利用它得到问候服务。

import java.io.FileNotFoundException;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import service.GreetingService;

/***********************************************************************
 * $Id: HelloWordApp.java,v1.0 2012-6-25 下午02:27:57 $
 * 
 * @author: loyal
 * 
 * (c)Copyright 2011 Topvision All rights reserved.
 ***********************************************************************/

/**
 * @author loyal
 * @created @2012-6-25-下午02:27:57
 *
 */
public class HelloWordApp {

    /**
     * @param args
     * @throws FileNotFoundException 
     * @throws BeansException 
     */
    public static void main(String[] args) throws BeansException, FileNotFoundException {
        Resource res = new ClassPathResource("testSpring.xml");
        BeanFactory beanFactory = new XmlBeanFactory(res);
        GreetingService greetingService = (GreetingService) beanFactory.getBean("greetingService");
        greetingService.sayGreeting();
    }
}

  BeanFactory就是Spring容器,将spring.xml文件载入容器后,main()方法调用BeanFactory的getBean()方法来得到问候服务的引用。使用这个引用,它最后调用了sayGreeting()方法。

  配置文件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="greetingService" class="service.impl.GreetingServiceImpl">
        <property name="greeting">
            <value>Hello Loyal</value>
        </property>
    </bean>
</beans>

   <beans>是XML文件的根元素,它也是任何Spring配置文件的根元素。<bean>元素用来在Spring容器中定义一个类以及它的配置信息。属性id表示greetingService Bean的名字,class属性表示Bean的全路径类名。在<bean>元素中,<property>元素表示设置属性值。使用<property>,Spring容器通过调用Bean的setGreeting()方法来设置其属性值。属性greeting的值在<value>元素中定义。

  下面的代码片段概略地展示了容器实例化greeting服务时容器所做的工作:

GreetingServiceImpl greetingService = new GreetingServiceImpl();
greetingService.setGreeting("Hello Loyal");

  我们也可以让Spring通过GreetingServiceImpl的单参数构造方法设置greeting属性的值:

<bean id="greetingService" class="service.impl.GreetingServiceImpl">
        <constructor-arg>
            <value>Hello Loyal</value>
        </constructor-arg>
</bean>

  下面代码展示了当使用<constructor-arg>元素的时候,容器是如何实例化问候服务的。

GreetingServiceImpl greetingService = new GreetingServiceImpl("Hello Loyal");

   要在系统中使用Spring,需要在工程中添加Spring jar包以及commons-logging-1.1.1.jar包