SSM整合相关纯注解配置类 备忘

纯注解配置类,包含Servlet,SpringMVC,Spring,MyBatis

组件名(artifactId) 版本号
javax.servlet-api 4.0.1
javax.servlet.jsp-api 2.3.3
spring-webmvc 5.2.10.RELEASE
mysql-connector-java 5.1.49
spring-jdbc 5.2.10.RELEASE
druid 1.2.17
mybatis 3.5.13
mybatis-spring 2.1.1

Servlet配置类

ServletConfig.java

package com.deepfal.config;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

/**
 * AbstractAnnotationConfigDispatcherServletInitializer是一个Spring框架中的抽象类,它用来配置使用基于Java的Spring配置(基于注解的配置) instead of the traditional web.xml file的Web应用程序。
 *
 * 它扩展了AbstractDispatcherServletInitializer类,并重写了特定的方法来指定Java @Configuration类的位置,DispatcherServlet的映射以及DispatcherServlet的名称。
 *
 * 关于AbstractAnnotationConfigDispatcherServletInitializer的一些关键点:
 *
 * 这是一个抽象类,需要扩展它并提供应用程序特定的配置。
 * getRootConfigClasses()方法返回配置根应用程序上下文的@Configuration类数组,这个上下文由ContextLoaderListener加载。
 * getServletConfigClasses()方法返回配置dispatcher servlet应用程序上下文的@Configuration类。
 * getServletMappings()方法返回DispatcherServlet的servlet映射,默认映射到"/"。
 * 所以总结一下,它提供了一种基于Java的方式来配置DispatcherServlet以及根应用程序上下文,作为web.xml的替代方案。扩展这个类并重写方法可以只使用Java代码而不需要web.xml就配置一个Spring MVC web应用程序。
 */

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    //加载Spring容器
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    //指向SpringMvc配置类,加载SpringMVC容器
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    //将哪些请求发给SpringMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //编码过滤器(仅对Body生效)
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

SpringMVC配置类

SpringMvcConfig.java

package com.deepfal.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

/**
 * SpringMvc配置类
 * 已配置:
 * Bean扫描器
 * 激活WebMvc功能(主要用于处理REST风格的json数据)
 */


//声明配置类
@Configuration
//Bean扫描器,入参为数组或包名,指向要扫描的包
@ComponentScan({"com.deepfal.controller","com.deepfal.config"})
//@EnableWebMvc是一个Spring MVC框架提供的注解,它的作用是启用Spring MVC框架的默认配置,例如消息转换器,格式化器和验证器等。它还启用了Spring MVC的注解驱动,这样就可以使用注解来处理HTTP请求和响应。
//这里主要用于将对象和json互相转换,用于REST风格
@EnableWebMvc
public class SpringMvcConfig {
}

Spring配置类

SpringConfig.java

package com.deepfal.config;


import org.springframework.context.annotation.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Spring配置类
 * 已配置:
 * Bean扫描器
 * 属性文件源加载器
 * 引入了jdbc和mybatis的配置Bean
 * 激活了事务管理功能
 */

//声明配置类
@Configuration
//Bean扫描器
@ComponentScan("com.deepfal.service")
//引入属性资源,用于Jdbc调用连接数据库的参数
@PropertySource("classpath:jdbc.properties")
//引入配置Bean
@Import({JdbcConfig.class,MyBatisConfig.class})
//启用事务管理器
@EnableTransactionManagement
public class SpringConfig {
}

配置拦截器放行静态资源

SpringMvcSupport.java

package com.deepfal.config;


import com.deepfal.config.filter.LoginCheckFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import javax.servlet.Filter;

/**
 * 配置放行静态资源
 * 不走SpringMVC处理
 */

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    }
}

Jdbc配置类

JdbcConfig.java

package com.deepfal.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/**
 * Jdbc配置Bean
 * 已配置:
 * Druid连接池
 * 平台事务管理器
 */
public class JdbcConfig {

    //从Spring配置类中指向的属性资源文件读取属性
    @Value("${jdbc.driver}")
    String driver;
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    //配置Druid数据连接池Bean
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    //平台事务管理器Bean
    @Bean
    public PlatformTransactionManager platformTransactionManager(DataSource dataSource){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }
}

MyBatis配置类

MyBatisConfig.java

package com.deepfal.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

/**
 * MyBatis配置Bean
 * 已配置:
 * Sql会话工厂Bean
 * Mapper扫描器
 */
public class MyBatisConfig {

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.deepfal.pojo");
        return factoryBean;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.deepfal.dao");
        return msc;
    }
}
最后修改:2023 年 08 月 18 日
如果觉得我的文章对你有用,请随意赞赏~