zoukankan      html  css  js  c++  java
  • 分离你的spring配置文件,让结构更清晰

    前言

    接着上一篇的,这次框架的改变也成功分离了spring的配置文件。

    以前,spring的配置文件从一开始的一点,到后面的逐渐变多,慢慢的,在一个spring的配置文件中就包含了好几块不同的bean的配置。有springMVC的,有mybatis的,等等。所有的都配置在一起看起来很不舒服,但是苦于之前配置方式不对就一直没有修改,这次进行分离。

    如果你像我一样之前还是一个applicationContext或者beans的话就赶紧往下看吧。

    PS:使用的spring版本为4.3.7

    第一步、配置web.xml

    原来我们spring的配置是:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:config/beans.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

    苦于上下文和listener所以我们这次把这些都删了。

    利用所有都采用servlet的配置方式去配置。如下。

    <servlet>
        <servlet-name>springMVC_dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring/spring-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>springMVC_dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>

    这个配置文件将会读取项目根目录下spring文件夹下以spring-开头的spring配置文件。没错。可以和context-param和listener拜拜了。

    第二步、分离配置文件

    我分离出了如下的配置

    image

    spring-dao主要是jdbc连接,mybatis的sqlSessionFactory等配置,总之和数据库打交道

    spring-quartz很简单,就只是定时器的配置。

    spring-redis是redis的配置

    spring-service是事务、扫描、注解等配置

    spring-web则是springMVC的相关配置

    还有拦截器,可以根据自己的需要继续往上面添加

    至此,所有的分离基本完成,你就可以根据自己的需要进行配置修改了。

    PS:具体配置文件有兴趣的可以看最后。

    分离的好处

    分离之后,明显赶紧结构化清晰很多。相关的配置很清楚在那一块。之后需要新加入配置也很简单。

    需要指出的是,每个配置文件上面的协议最好写清楚,不要一股脑全部复制粘贴,用到什么写什么。

    尽可能的简化配置文件,让配置文件看的明白。

    各个配置文件参考

    下面是各个配置文件参考,只是作为参考,需要根据实际需求改动。如果配置有不合理的地方也请原谅并指出。谢谢。

    spring-web

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"  
         xmlns:context="http://www.springframework.org/schema/context"  
         xmlns:p="http://www.springframework.org/schema/p"  
         xmlns:mvc="http://www.springframework.org/schema/mvc"
         xmlns:aop="http://www.springframework.org/schema/aop"  
         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-4.3.xsd  
          http://www.springframework.org/schema/context  
          http://www.springframework.org/schema/context/spring-context.xsd  
          http://www.springframework.org/schema/mvc  
          http://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop.xsd">
        
        <!-- 注解 -->
        <mvc:annotation-driven/>
        
        <!-- 扫描包 -->
        <context:component-scan base-package="com.ssm.controller">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        
        <!-- 允许访问路径 -->
        <mvc:resources location="/resources/" mapping="/resources/**/"/>
        
        <!-- 视图解析器配置 -->
        <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
            <property name="viewResolvers">
                <list>
                    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                        <property name="prefix" value="/WEB-INF/pages/"/>
                        <property name="suffix" value=".jsp"/>
                    </bean>
                </list>
            </property>
            <property name="defaultViews">
                <list>
                    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
                </list>
            </property>
        </bean>
        
        <!-- 文件上传配置 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="524288000"/>
            <property name="defaultEncoding" value="UTF-8"/>
            <property name="resolveLazily" value="true"/>
        </bean>
        
        <!--全局异常捕捉 -->
        <bean class="com.ssm.exception.GlobalExceptionResolver" />
    </beans>

    spring-service

    <?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"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
               http://www.springframework.org/schema/aop 
               http://www.springframework.org/schema/aop/spring-aop.xsd
               http://www.springframework.org/schema/tx
               http://www.springframework.org/schema/tx/spring-tx.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--扫描包(包含子包)下所有使用注解的类型-->
        <context:component-scan base-package="com.ssm">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
        <!--配置事务管理器(mybatis采用的是JDBC的事务管理器)-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!--配置基于注解的声明式事务,默认使用注解来管理事务行为-->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
    </beans>

    spring-redis(还需优化,只是简单测试,之后会有)

    <?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-4.3.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd">
            
         <bean id="redisDao" class="com.ssm.dao.cache.RedisDao">
               <constructor-arg index="0" value="localhost" />
               <constructor-arg index="1" value="6379" />
         </bean>
    
    </beans>

    spring-quartz

    <?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"
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task.xsd ">
    
       <task:annotation-driven />
       <context:annotation-config />
        <context:component-scan base-package="com.ssm.quartz"/>  
         
    </beans>

    spring-dao

    <?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-4.3.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd">
     
        <context:property-placeholder location="classpath:resources/jdbc.properties"/>
        
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="minIdle" value="${jdbc.minIdle}"></property>
            <property name="maxIdle" value="${jdbc.maxIdle}"></property>
            <property name="maxWait" value="${jdbc.maxWait}"></property>
            <property name="maxActive" value="${jdbc.maxActive}"></property>
            <property name="initialSize" value="${jdbc.initialSize}"></property>
            <property name="testWhileIdle"><value>true</value></property>
            <property name="testOnBorrow"><value>true</value></property>
            <property name="testOnReturn"><value>false</value></property>
        </bean>
    
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--注入数据库连接池-->
            <property name="dataSource" ref="dataSource" />
            <!--扫描entity包,使用别名,多个用;隔开-->
            <property name="typeAliasesPackage" value="com/ssm/entity" />
            <!--扫描sql配置文件:mapper需要的xml文件-->
            <property name="mapperLocations" value="classpath*:com/ssm/dao/sqlxml/*.xml"></property>
        </bean>
        
        <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
        </bean>
    
        <!--配置扫描Dao接口包,动态实现DAO接口,注入到spring容器-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--注入SqlSessionFactory-->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            <!-- 给出需要扫描的Dao接口-->
            <property name="basePackage" value="com.ssm.dao"/>
        </bean>
    
    </beans>

    spring-interceptor

    <?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"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
               http://www.springframework.org/schema/mvc  
                 http://www.springframework.org/schema/mvc/spring-mvc.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 拦截器 -->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/xxx/**/*.htm"/>
                <bean class="com.ssm.interceptor.Interceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
        
    </beans>
  • 相关阅读:
    Java 基本语法之--循环
    java 基本语法之--选择结构
    java基本语法之--进制、运算符
    Java的基本语法之--关键字、标识符、变量
    编写第一个 Java 应用程序
    idea安装、配置及基本使用
    jmeter监听器扩展
    jmeter5.1分布式压测
    青花瓷安装
    python 时间和日期
  • 原文地址:https://www.cnblogs.com/linkstar/p/6709206.html
Copyright © 2011-2022 走看看