spring boot完美集成dwr3.0.2-RELEASE

来源:互联网 发布:怎么做数据透视表 编辑:程序博客网 时间:2024/06/03 09:20

第一步:注册SpringDwrServlet到spring容器中

import java.util.HashMap;import java.util.Map;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.ImportResource;/** * 注册SpringDwrServlet到spring容器中 *  * @author 许畅 * @since JDK1.7 * @version 2017年11月28日 许畅 新建 */@Configuration@ImportResource("classpath:dwr-spring-config.xml")public class SpringBootDwrServletRegister {        /**     * @param springDwrServlet SpringDwrServlet     * @return ServletRegistrationBean     */    @Bean    public ServletRegistrationBean registDwrServlet(SpringDwrServlet springDwrServlet) {        ServletRegistrationBean servletRegister = new ServletRegistrationBean(springDwrServlet, "/dwr/*");        Map<String, String> initParameters = new HashMap<String, String>();        initParameters.put("debug", "true");        servletRegister.setInitParameters(initParameters);        return servletRegister;    }    }


第二步:重写DwrSpringServlet使dwr代理的实例在spring容器中

import javax.servlet.ServletConfig;import org.directwebremoting.impl.StartupUtil;import org.directwebremoting.spring.DwrSpringServlet;import org.directwebremoting.spring.SpringContainer;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;/** * SpringDwrServlet *  * <pre> * 重写DwrSpringServlet使dwr代理的实例在spring容器中 * </pre> *  * @author 许畅 * @since JDK1.7 * @version 2017年11月28日 许畅 新建 */@Componentpublic class SpringDwrServlet extends DwrSpringServlet {        /**  */    private static final long serialVersionUID = 1L;        @Override    protected SpringContainer createContainer(ServletConfig servletConfig) {        ApplicationContext appContext = getApplicationContext(servletConfig.getServletContext());                SpringDwrContainer springContainer = new SpringDwrContainer();        springContainer.setBeanFactory(appContext);        StartupUtil.setupDefaultContainer(springContainer, servletConfig);        return springContainer;    }    }


第三步:Spring版本dwr容器

import java.util.Map;import org.directwebremoting.extend.ContainerConfigurationException;import org.directwebremoting.spring.SpringContainer;import org.springframework.beans.factory.ListableBeanFactory;import org.springframework.util.ClassUtils;import com.comtop.cap.common.util.StringUtil;/** * Spring版本dwr容器 *  * @author 许畅 * @since JDK1.7 * @version 2017年11月28日 许畅 新建 */public class SpringDwrContainer extends SpringContainer {        /**     *      * @see org.directwebremoting.spring.SpringContainer#addParameter(java.lang.String, java.lang.Object)     */    @Override    public void addParameter(String askFor, Object valueParam) throws ContainerConfigurationException {                try {            Class<?> clz = ClassUtils.forName(askFor, ClassUtils.getDefaultClassLoader());                        @SuppressWarnings("unchecked")            Map<String, Object> beansOfType = (Map<String, Object>) ((ListableBeanFactory) beanFactory)                .getBeansOfType(clz);                        if (beansOfType.isEmpty()) {                super.addParameter(askFor, valueParam);            } else if (beansOfType.size() > 1) {                String key = StringUtil.uncapitalize(SpringDwrServlet.class.getSimpleName());                if (beansOfType.containsKey(key)) {                    beans.put(askFor, beansOfType.get(key));                } else {                    throw new ContainerConfigurationException("spring容器中无法找到对应servlet:" + key);                }            } else {                beans.put(askFor, beansOfType.values().iterator().next());            }        } catch (ClassNotFoundException ex) {            super.addParameter(askFor, valueParam);        }            }}


第四步:容器扫描配置文件 dwr-spring-config.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd       http://www.directwebremoting.org/schema/spring-dwr http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">     <dwr:configuration />      <dwr:annotation-scan base-package="com.xxx" scanDataTransferObject="true" scanRemoteProxy="true"/>   </beans>

总结: dwr这个框架后续人员维护的比较少,有些东西照着官网来还行不通,需要自己看源码重写,但是用起来还是比较方便的,

不清楚的自己看dwr源码,和查看spring boot官网和dwr官网






原创粉丝点击