java中configmanager_JavaConfig 极简整合 SSM

本文介绍了如何使用JavaConfig替代XML配置,简化SSM(Spring、SpringMVC、MyBatis)框架的整合过程。通过一个核心配置类Application.java,实现了Spring Bean、web.xml内容的注解配置,以及数据库连接等设置。只需少量配置,即可完成SSM项目的搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

项目结构

846d809bed835317ff1225d8f96f9383.png

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

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">

maven

UTF-8

1.8

1.8

4.11

1.2

1.2.17

5.0.8.RELEASE

1.8.13

1.0

5.1.49

1.0.9

3.4.5

1.3.1

7.0

2.9.5

junit

junit

${junit.version}

test

commons-logging

commons-logging

${commons-logging.version}

javax

javaee-api

jar

${javaee-api.version}

compile

false

log4j

log4j

${log4j.version}

org.springframework

spring-beans

${org.springframework.version}

org.springframework

spring-core

${org.springframework.version}

org.springframework

spring-context

${org.springframework.version}

org.springframework

spring-expression

${org.springframework.version}

org.springframework

spring-context-support

${org.springframework.version}

org.springframework

spring-context-indexer

${org.springframework.version}

org.springframework

spring-aop

${org.springframework.version}

org.springframework

spring-aspects

${org.springframework.version}

org.springframework

spring-instrument

${org.springframework.version}

org.springframework

spring-messaging

${org.springframework.version}

org.springframework

spring-jdbc

${org.springframework.version}

org.springframework

spring-orm

${org.springframework.version}

org.springframework

spring-oxm

${org.springframework.version}

org.springframework

spring-jms

${org.springframework.version}

org.springframework

spring-tx

${org.springframework.version}

org.springframework

spring-websocket

${org.springframework.version}

org.springframework

spring-web

${org.springframework.version}

org.springframework

spring-webmvc

${org.springframework.version}

org.springframework

spring-webflux

${org.springframework.version}

org.springframework

spring-test

${org.springframework.version}

mysql

mysql-connector-java

${mysql-connector-java.version}

org.mybatis

mybatis

${mybatis.version}

org.mybatis

mybatis-spring

${mybatis-spring.version}

com.alibaba

druid

${druid.version}

com.fasterxml.jackson.core

jackson-core

${jackson.version}

com.fasterxml.jackson.core

jackson-databind

${jackson.version}

com.fasterxml.jackson.core

jackson-annotations

${jackson.version}

com.fasterxml.jackson.module

jackson-module-jaxb-annotations

${jackson.version}

SSMBoot

maven-clean-plugin

3.1.0

maven-resources-plugin

3.0.2

maven-compiler-plugin

3.8.0

maven-surefire-plugin

2.22.1

maven-war-plugin

3.2.2

maven-install-plugin

2.5.2

maven-deploy-plugin

2.8.2

org.apache.tomcat.maven

tomcat7-maven-plugin

2.2

/

8080

src/main/java

**/*.*

src/main/resources

**/*.*

true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值