SPRING 开头定义
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
=
"http://www.springframework.org/schema/context"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
</
beans
>
1、在BEAN中配置系统变量,或从属性文件中取值
配置:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
使用:
<property name="workDir" value="${user.dir}"/>
配置:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
使用:
<property name="url" value="${jdbc.url}"/>
2、在BEAN中配置messageSource实现国际化
<bean id="serverMessages" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<!-- 用以覆盖com/hd123/jpos/server/posserver-messages定义的消息 -->
<value>posbo-messages</value>
<value>com/hd123/jpos/bo/posbo-messages</value>
</list>
</property>
</bean>
<property name="basenames">
<list>
<!-- 用以覆盖com/hd123/jpos/server/posserver-messages定义的消息 -->
<value>posbo-messages</value>
<value>com/hd123/jpos/bo/posbo-messages</value>
</list>
</property>
</bean>
可以指定编码方式,通过指定:<property name="defaultEncoding" value="gbk" />
3、配置web.xml
3.1 第一种在WEB SERVICE中加入SPRING的方式为
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/tracker.xml</param-value>
</context-param>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/tracker.xml</param-value>
</context-param>
3.2 第二种方式是采用listener的方式进行添加(待补充)
3.3 在WEB SERVICE采用SPRING的远程方法调用,示例:
1、在web.xml中加入以下代码:
<servlet>
<servlet-name>media</servlet-name>
<servlet-class>com.hd123.bt.media.MediaDispatcher</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/media.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>media</servlet-name>
<url-pattern>/media/*</url-pattern>
</servlet-mapping>
<servlet-name>media</servlet-name>
<servlet-class>com.hd123.bt.media.MediaDispatcher</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/media.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>media</servlet-name>
<url-pattern>/media/*</url-pattern>
</servlet-mapping>
说明:其中MediaDispatcher extends DispatcherServlet,并在init初始化servlet时,调用了以下代码:
getServletContext().setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
getWebApplicationContext());
getWebApplicationContext());
因为DispatcherServlet加载的media.xml只在这个servlet中有效,加入以上代码后,其他servlet也可以调用。
2、在/WEB-INF/media.xml中定义远程服务如下,如果没有显示给出contextConfigLocation则默认地址为/WEB-INF/media-servlet.xml文件:
<bean name="/btmedia"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="mediaService" />
<property name="serviceInterface" value="com.hd123.bt.cmi.IMediaService" />
</bean>
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="mediaService" />
<property name="serviceInterface" value="com.hd123.bt.cmi.IMediaService" />
</bean>
3、在client端中定义调用服务如下:
<bean id="mediaService"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="${JPOSBTSVR}/media/btmedia" />
<property name="serviceInterface" value="com.hd123.bt.cmi.IMediaService" />
</bean>
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="${JPOSBTSVR}/media/btmedia" />
<property name="serviceInterface" value="com.hd123.bt.cmi.IMediaService" />
</bean>
PS1.Spring远程调用与RMI比较:
在JAVA中,如果用RMI远程方法调用,需要实现Remote接口,同时要求实现该接口的类是可以序列化的。因此在使用RMI调用时,有时会有很多麻烦,因为有时候我们的类往往是不可序列化的,比如包含了进程句枸、数据库连接等。
使用Spring远程调用就没有该问题,Spring的远程方法调用只要求接口参数必须是可序列化的,而对于实现接口的类来说,则不要求其可序列化。
PS2.在WEB端用Spring的另一个好处是可以利用它来进行数据库连接池管理,而不需要程序员手动配置tomcat的连接池。