dwr联手spring

来源:互联网 发布:帝国cms个人博客模板 编辑:程序博客网 时间:2024/05/01 00:36

Dwr联手spring

我在实战dwr那篇文章里面介绍了怎么调用服务器端的java类,这次我要把数据库的调用通过spring容器注入到这个类里面,然后用dwr来调用这个类里面的方法访从数据库中取得数据

首先,要保证hibernate所需的jar文件都齐全了

其次,写好你的spring-application.xml文件把里面的bean都配置好了。

介绍一下:

关于对数据库的调用,我的习惯是采用3层架构,即web,service,daoWeb层即表现层,就是最终调用层。Service层是业务逻辑层,可以对数据加工。Dao层是最终访问数据库层。Dao层我采用spring的事务代理器TransactionProxyFactoryBean代理;service我采用spring的普通的bean代理器ProxyFactoryBean代理;web层就是上面所说的那个java类,在这里,我也把它配置到spring容器里面了,作为一个springbean来使用。通过spring容器,我把dao层注入到service层,把service层注入到web层即那个java类,作为它的一个属性来使用。

我把实例写出来看看:

spring-application.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="dataSource"

       class="org.springframework.jndi.JndiObjectFactoryBean">

       <property name="jndiName">

           <value>java:comp/env/VSPN18DATASOURCE</value>

       </property>

</bean>

<bean id="dtatImportSessionFactory"

       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <property name="dataSource">

           <ref bean="dataSource" />

       </property>

       <property name="mappingResources">

           <list>                   <value>com/vstsoft/dataimport/dto/Dealer.hbm.xml</value>

           </list>

       </property>

       <property name="hibernateProperties">

           <props>

              <prop key="hibernate.dialect">

                  org.hibernate.dialect.MySQLDialect

              </prop>

              <prop key="hibernate.show_sql">false</prop>

           </props>

       </property>

</bean>

<bean id="transactionManager"

       class="org.springframework.orm.hibernate3.HibernateTransactionManager">

       <property name="sessionFactory">

           <ref local="dtatImportSessionFactory" />

       </property>

</bean>

<bean id="impDealerDAO"

       class="com.vstsoft.dataimport.dao.impl.DealerDAOImpl">

       <property name="sessionFactory">

           <ref local="dtatImportSessionFactory" />

       </property>

</bean>

<bean id="dealerDAOProxy"

       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

       <property name="transactionManager">

           <ref bean="transactionManager" />

       </property>

       <property name="target">

           <ref local="impDealerDAO" />

       </property>

       <property name="transactionAttributes">

           <props>

              <prop key="insert*">PROPAGATION_REQUIRED</prop>

              <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>

           </props>

       </property>

</bean>

<bean id="dealerManage"

       class="org.springframework.aop.framework.ProxyFactoryBean">

       <property name="proxyInterfaces">

           <value>com.vstsoft.dataimport.service.DealerManage</value>

       </property>

       <property name="target">

           <ref bean="dealerManageTarget" />

       </property>

    </bean>

    <bean name="dealerManageTarget"

       class="com.vstsoft.dataimport.service.impl.DealerManageTarget">

       <property name="dealerDAO">

           <ref bean="dealerDAOProxy" />

       </property>

    </bean>

    <bean name="monitor" singleton="false"

       class="com.vstsoft.dataimport.dto.Monitor">

       <property name="dealerManage">

           <ref bean="dealerManage" />

       </property>

    </bean>

</beans>

要注意的是这个bean”monitor”它就是最终调用即我们的那个调用类。我把它当作一个spring容器的bean来管理,并且把service层注入了它里面。

那,接下来,我们要修改dwr.xml了:

原来的配置

<create creator="new" javascript="DealerMonitor">

           <param name="class"

              value="com.vstsoft.dataimport.dto.Monitor" />

</create>

联手spring之后的配置

<create creator="spring" javascript="DealerMonitor">

           <param name="beanName" value="monitor"></param>

           <!-- 指定Spring配置文件的位置,如果没设置DWR会根据web.xml找到主配置文件,不过速度上就慢了   

              <param name="location" value="applicationContext.xml"></param>-->

</create>

这里的creater改成了spring,并且声明了要调用的spring容器中的bean

JavaMonitor相应的变成了:

package com.vstsoft.dataimport.dto;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

 

import com.vstsoft.dataimport.service.DealerManage;

 

/**

 * author:sunjianbin <br>

 * email:volcano_hosan@sina.com

 */

public class Monitor {

    private static Log log = LogFactory.getLog(Monitor.class);

 

    private DealerManage dealerManage;

 

    /**

     * 从数据库中取得数据

     */

    public List findDealers() {

       if (dealerManage == null) {

           log.info("dealerManage 没有注入");

       }

       List list = dealerManage.findDealers();

       log.info("list size:" + list.size());

       return list;

    }

 

    public DealerManage getDealerManage() {

       return dealerManage;

    }

 

    public void setDealerManage(DealerManage dealerManage) {

       this.dealerManage = dealerManage;

    }

}