基于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包
浙公网安备 33010602011771号