zoukankan      html  css  js  c++  java
  • JavaConfig 极简整合 SSM

    前言

    传统的 XML 文件配置整合 SSM 框架是不是很繁琐? 如果框架搭建好了想移植到另外一个项目,又要在各种 XML 文件中许多参数, 缺少很快的配置移植性。

    针对这些麻烦的问题,我做了一种 JavaConfig 自动整合方案,几乎不需要编写任何 XML 文件,包括 web.xml 文件。仅仅配置数据库的连接属性,三个框架就搭建完成了。

    项目结构

    Application.java 是核心配置类,所有的整合配置全部在里面。该类使用注解的方式配置了 Spring Bean ,使用 WebApplicationInitializer 接口配置了 web.xml 中的内容。

    application.xml 是 Spring 的核心配置文件,主要只需要配置扫描的包即可

    Application.java

    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.mapper.MapperScannerConfigurer;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.web.WebApplicationInitializer;
    import org.springframework.web.context.ContextLoaderListener;
    import org.springframework.web.context.support.XmlWebApplicationContext;
    import org.springframework.web.filter.CharacterEncodingFilter;
    import org.springframework.web.servlet.DispatcherServlet;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    import javax.servlet.FilterRegistration;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletRegistration;
    
    /**
     * SSMBoot Core Configuration Object 简化版
     *
     * Application.java 位置必须在项目最外层
     * application.xml 配置文件名必须一致, 所有 Spring 的配置必须在该文件内
     *
     * @author haidnor
     */
    public class Application {
    
        static final String DRUID_URL = "jdbc:mysql://wangxiang.zone:33061/ssm";
        static final String DRUID_USERNAME = "root";
        static final String DRUID_PASSWORD = "root";
        static final String DRUID_DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
    
        /* Default ------------------------------------------------------------------------------------------------------ */
    
        static final String SPRING_MVC_VIEW_RESOLVER_PREFIX = "/";
        static final String SPRING_MVC_VIEW_RESOLVER_SUFFIX = ".html";
    
        static final String APPLICATION = Application.class.getPackage().getName();
        static final String MAPPER_PACKAGE = APPLICATION;
        static final String MYBATIS_TYPE_ALIASES_PACKAGE = APPLICATION;
        static final String MYBATIS_MAPPER_LOCATIONS = "classpath*:" + APPLICATION.replace('.', '/') + "/**.xml";
    
        /* WebApplicationInitializer ------------------------------------------------------------------------------------ */
    
        static class WebContext implements WebApplicationInitializer {
    
            ServletContext servletContext = null;
    
            @Override
            public void onStartup(ServletContext container) {
                servletContext = container;
                addDispatcherServlet();
                addDruidStatViewServlet();
                addCharacterEncodingFilter();
                addContextLoaderListener();
                addDruidWebStatFilter();
            }
    
            void addDispatcherServlet() {
                XmlWebApplicationContext appContext = new XmlWebApplicationContext();
                appContext.setConfigLocation("classpath:application.xml");
                ServletRegistration.Dynamic dispatcherServlet =
                        servletContext.addServlet("DispatcherServlet", new DispatcherServlet(appContext));
                dispatcherServlet.setLoadOnStartup(1);
                dispatcherServlet.addMapping("/");
            }
    
            void addDruidStatViewServlet() {
                StatViewServlet statViewServlet = new StatViewServlet();
                ServletRegistration.Dynamic druidStatView =
                        servletContext.addServlet("DruidStatView", statViewServlet);
            }
    
            void addDruidWebStatFilter() {
                WebStatFilter webStatFilter = new WebStatFilter();
                webStatFilter.isExclusion("*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
                FilterRegistration.Dynamic druidWebStatFilter =
                        servletContext.addFilter("DruidWebStatFilter", webStatFilter);
                druidWebStatFilter.addMappingForUrlPatterns(null, false, "/*");
            }
    
            void addCharacterEncodingFilter() {
                CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
                characterEncodingFilter.setEncoding("UTF-8");
                FilterRegistration.Dynamic encodingFilter =
                        servletContext.addFilter("characterEncodingFilter", characterEncodingFilter);
                encodingFilter.addMappingForUrlPatterns(null, false, "/");
            }
    
            void addContextLoaderListener() {
                servletContext.setInitParameter("contextConfigLocation", "classpath:application.xml");
                servletContext.addListener(new ContextLoaderListener());
            }
        }
    
        // Components ------------------------------------------------------------------------------------------------------
    
        @Configuration
        static class DataSource {
    
            static final DruidDataSource DRUID_DATA_SOURCE = druidDataSource();
    
            @Bean
            MapperScannerConfigurer mapperScanner() {
                MapperScannerConfigurer mapperScanner = new MapperScannerConfigurer();
                mapperScanner.setBasePackage(MAPPER_PACKAGE);
                mapperScanner.setSqlSessionFactoryBeanName("sqlSessionFactory");
                return mapperScanner;
            }
    
            @Bean("sqlSessionFactory")
            SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception {
                SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
                sqlSessionFactoryBean.setDataSource(DRUID_DATA_SOURCE);
                sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MYBATIS_MAPPER_LOCATIONS));
                sqlSessionFactoryBean.setTypeAliasesPackage(MYBATIS_TYPE_ALIASES_PACKAGE);
                return sqlSessionFactoryBean;
            }
    
            @Bean
            DataSourceTransactionManager dataSourceTransactionManager() {
                DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
                transactionManager.setDataSource(DRUID_DATA_SOURCE);
                return transactionManager;
            }
    
            @Bean
            static DruidDataSource druidDataSource() {
                DruidDataSource dataSource = new DruidDataSource();
                dataSource.setDriverClassName(DRUID_DRIVER_CLASS_NAME);
                dataSource.setUrl(DRUID_URL);
                dataSource.setUsername(DRUID_USERNAME);
                dataSource.setPassword(DRUID_PASSWORD);
                return dataSource;
            }
        }
    
        @Configuration
        @EnableWebMvc
        static class Web {
            @Bean
            ViewResolver viewResolver() {
                InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
                viewResolver.setPrefix(SPRING_MVC_VIEW_RESOLVER_PREFIX);
                viewResolver.setSuffix(SPRING_MVC_VIEW_RESOLVER_SUFFIX);
                viewResolver.setExposeContextBeansAsAttributes(true);
                return viewResolver;
            }
        }
    
    }
    

    application.xml

    <?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:tx="http://www.springframework.org/schema/tx"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
    	   http://www.springframework.org/schema/beans/spring-beans.xsd
     	   http://www.springframework.org/schema/tx
    	   http://www.springframework.org/schema/tx/spring-tx.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">
    
        <context:component-scan base-package="cn.haidnor.project"/>
    
    </beans>
    

    maven

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <junit.version>4.11</junit.version>
            <commons-logging.version>1.2</commons-logging.version>
            <log4j.version>1.2.17</log4j.version>
            <org.springframework.version>5.0.8.RELEASE</org.springframework.version>
            <aspectjweaver.version>1.8.13</aspectjweaver.version>
            <aopalliance.version>1.0</aopalliance.version>
            <mysql-connector-java.version>5.1.49</mysql-connector-java.version>
            <druid.version>1.0.9</druid.version>
            <mybatis.version>3.4.5</mybatis.version>
            <mybatis-spring.version>1.3.1</mybatis-spring.version>
            <javaee-api.version>7.0</javaee-api.version>
            <jackson.version>2.9.5</jackson.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>${commons-logging.version}</version>
            </dependency>
    
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <type>jar</type>
                <version>${javaee-api.version}</version>
                <scope>compile</scope>
                <optional>false</optional>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
    
            <!--spring core start-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-indexer</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring core end-->
    
            <!--spring aop start-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spirng aop end-->
    
            <!--spring aspects start-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring aspects end-->
    
            <!--spring instrumentation start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-instrument</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring instrumentation end-->
    
            <!--spring messaging start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-messaging</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring messaging end-->
    
            <!--spring data access start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-oxm</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring data access end-->
    
            <!--spring web start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-websocket</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webflux</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring web end -->
    
            <!--spring test start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <!--spring test end -->
    
            <!-- MySQL -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
    
            <!-- MyBaits -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
    
            <!-- MyBaits 与 Spring 的整合包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
    
            <!-- Druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
    
            <!--jackson依赖-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-jaxb-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <finalName>SSMBoot</finalName>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <artifactId>maven-clean-plugin</artifactId>
                        <version>3.1.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.0.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.22.1</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>3.2.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-install-plugin</artifactId>
                        <version>2.5.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>2.8.2</version>
                    </plugin>
                </plugins>
            </pluginManagement>
    
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/</path>
                        <port>8080</port>
                    </configuration>
                </plugin>
            </plugins>
    
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    
  • 相关阅读:
    Atitit 函数调用的原理与本质attilax总结 stdcall cdecl区别
    Atitit 图像处理 halcon类库的使用  范例边缘检测 attilax总结
    互联网创业原则与创业模式attilax大总结
    Atitit SeedFilling种子填充算法attilax总结
    Atitit 软件体系的进化,是否需要一个处理中心
    Atitit 获取剪贴板内容
    Atitit 架构的原则attilax总结
    Atitit Atitit 零食erp数据管理世界著名零食系列数据.docx世界著名零食
    Atitit 个人信息数据文档知识分类
    Atitti python2.7安装 numpy attilax总结
  • 原文地址:https://www.cnblogs.com/Haidnor/p/13661235.html
Copyright © 2011-2022 走看看