一、Spring配置步骤
Spring的jar包很多,我们这里只需要必须的包和Spring的依赖包,其它的根据需要再加。这些jar包分别是:
aopalliance-1.0.jar
commons-logging-1.1.1.jar
spring-aop-3.1.1.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar
spring-core-3.1.1.RELEASE.jar
spring-expression-3.1.1.RELEASE.jar
其中,”commons-logging-1.1.1.jar“是Spring 的依赖包。
创建一个Hello.java类,以便后续测试能够进行对象的创建进行测试,内容如下:
package com.uni2uni.spring.model; public class Hello { public String hello(){ return "Hello,world!"; } }
在src目录下面创建spring-conf.xml。(注:名字和路径可自定义)
”spring-conf.xml“文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> <bean id="hello" class="com.uni2uni.spring.model.Hello" /> </beans>
创建测试类,内容如下:
package com.uni2uni.spring.unit; import junit.framework.TestCase; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.uni2uni.spring.model.Hello; public class TestSpring extends TestCase{ private BeanFactory factory=new ClassPathXmlApplicationContext("spring-conf.xml"); public void TestHello(){ Hello hello = (Hello)factory.getBean("hello"); //或者像下面这样调用也可以 //Hello hello = factory.getBean("hello",Hello.class); System.out.println(hello.hello()); } }
然后运行单元测试,如果能够输出“Hello,world!”则证明Spring配置正确。
二、知识扩展
在“pom.xml”文件中加入如下代码:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.1.RELEASE</version> </dependency>
在本例中的“spring.xml”文件中有如下代码:
<bean id="hello" class="com.uni2uni.spring.model.Hello" />
这行代码省略了scope属性,它等效于下面的代码:
<bean id="hello" class="com.uni2uni.spring.model.Hello" scope="singleton" />
scope属性可选值有:“singleton”(默认)、“prototype”、“request”、“session”、“global session”。
singleton:默认值,为单例。Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
prototype:多例。作用域为部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。
request:表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效。
session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效。
global session:类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
Spring2.0在WebApplicationContext中还为Bean添加了三个新的作用域:request作用域、session作用域和global session作用域。而在非Web应用的环境下,Bean只有singleton和prototype两种作用域。