一,基本环境配置
1,下载SpringFramework最新版本,并在classpath中加入Spring.jar,目前已经发展到1.2版。
2,下载SpringFramework所所依赖的其它jar包,例如common-logging.jar等等。
3,Spring采用Apache common logging,并结合Apache log4j作为日志输出组件,因此需要在classpath中创建log4j.properties文件,并做相应的配置,例如:
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%
n
二,Bean配置文件
1,在classpath中需要创建一个bean配置文件(并非强制),用于描述哪些对象需要通过Spring来管理以及这些对象之间的关系等等,可以是一个xml文件,也可以是一个properties文件。
1)Xml配置文件的一个例子:
2)Properties配置文件的一个例子:
2,Xml形式的bean配置文件语法
文件头声明:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans></beans>,最外层标签,在文件头中定义。
<bean></bean>,bean定义的标签,是最为常用的标签之一。其常用属性如下:
Id,bean的唯一标识,用于bean对象的获取。
name,bean的名称,用于bean对象的获取。
class,bean实例化时所对应的java类。
singleton,取值为true/false,标识bean是否为单一实例,默认值为true
autowire,bean属性间非显示引用时,自动进行引用的方式,取值范围byType、byName、constructor
dependency-check,在设置了autowire时有效,告诉容器在自动进行引用时的检查规则,取值范围objects、simple、all
<property></property>,配置bean属性的标签。
name,属性的名称,一般和bean所对应的类中的属性的名称相同。
<value></value>,配置属性的值,一般与property配套使用,其值一般为实体值,例如
<property name=“url”>
<value>http://www.google.com</value>
</property>
<ref/>,配置属性的值,一般与property配套使用,其值一般为对象。
bean,ref的值所指向的对象的bean的名称。
例如:
<property name=“userDao”>
<ref bean=“UserDao”/>
</property>
例子:
<list></list>,如果bean的属性中有列表或数组对象,则通过该标签和value或ref标签合用,将值一一列出,例如:
<property name=”myRefArray”>
<list>
<ref bean=”myInventoryManager”/>
<ref bean=”yourInventoryManager”/>
</list>
</property>
<map></map>,如果bean的属性中有map对象,则通过该标签和entry与value或ref标签合用,将值一一列出,例如:
<property name=”myValueMap”>
<map>
<entry key=”myMapKey”>
<value>myMapValue</value>
</entry>
<entry key=”yourMapKey”>
<value>yourMapValue</value>
</entry>
</map>
</property>
例子:
三,配置环境加载
1,配置环境的加载,主要是读取bean配置文件,并将各个bean初始化。
初始化过程由应用程序自己来进行,一般分为两种情况:xml形式bean配置文件的加载和property形式bean配置文件的加载。
1)property形式bean配置文件的加载:
ListableBeanFactory bf=new DefaultListableBeanFactory();
PropertiesBeanDefinitionReader reader =new PropertiesBeanDefinitionReader(bf);
Resource resource = new ClassPathResource(“beans-config.properties”);
reader.loadBeanDefinitions(resource);
UserDao udao=(UserDao)bf.getBean(“userdao”);
2)xml形式bean配置文件的加载:
Resource resource = new ClassPathResource(“beans-config.xml”);
ListableBeanFactory bf = new XmlBeanFactory(resource);
UserDao udao=(UserDao)bf.getBean(“userdao”);
ListableBeanFactory bf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(bf);
Resource resource = new ClassPathResource(“beans-config.xml”);
reader.loadBeanDefinitions(resource);
UserDao udao=(UserDao)bf.getBean(“userdao”);
2,为了支持J2EE web应用,Spring提供了一个ApplicationContext对象,该对象除了提供bean的获取之外,还可以提供对Resource Bundle支持,对一些应用事件的支持等等。此时bean的配置文件一般放在WEB-INF目录下。
为了在J2EE服务启动时,自动加载Spring环境,需要在web.xml中配置一个listener
<web-app>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener></web-app>
那么在servlet、jsp、filter或Struts Action中可以按照下面的方式访问:
WebApplicationContext wac=WebApplicationContextUtils.getWebApplicationContext(servletContext);
UserDao udao=(UserDao)was.getBean(“userdao”);
一般来说经典的Web MVC框架,例如Struts、SpringMVC等都提供了自己方式,可以将servlet或action做为pojo来让Spring统一管理,这样就不需要手工加载context并获取对象了。