小工具      在线工具  汉语词典  css  js  c++  java

完全注解的ssm框架搭建

# Spring Boot,spring,mybatis,java 额外说明

收录于:152天前

使用配置文件有时比较麻烦,但是spring可以实现完整的注解开发。

spring注解开发基础

使用配置文件启动IoC容器的对象是ClassPathXmlApplicationContext而使用配置类启动IoC容器的对象是AnnotationConfigApplicationContext

配置类

import com.ssm.pojo.Test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringContextConfig {
    
    @Bean
    public Test test1(){
    
        return new Test();
    }
}

启动程序

import com.ssm.config.SpringContextConfig;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.applet.AppletContext;

public class ConfigTest {
    
    @Test
    public void test1(){
    
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringContextConfig.class);
        com.ssm.pojo.Test test = context.getBean(com.ssm.pojo.Test.class);

    }
}

spring配置类

@配置配置类注解
@ComponentScan("com.ssm.controller") 组件扫描位置注解

@Configuration
@ComponentScans({
    @ComponentScan("com.ssm.pojo"),@ComponentScan("com.ssm.dao"),@ComponentScan("com.ssm.service")})  //组件扫描位置,除控制器扫描所有类

public class SpringContextConfig{
    
    @Bean
    public Test test1(){
    
        return new Test();
    }
}

该类是根配置类相当于spring-context.xml进行spring的相关配置,可以通过@Bean注解将java对象注入到IoC容器中也可以使用@ComponentScans配置扫描的位置,开启注解扫描。

spring mvc配置类

在spring中我们可以通过用java代码配置bean,而不使用xml (相当于applicationContext.xml),改成使用java代码来实现javabean的配置:

@Configuration   //定义是spring的bean配置类
@ComponentScan("com.ex.test")  //扫描包
@Import(other.class)  //导入config
public class ApplicationContext{
    
	@Bean
	public User user(){
    return new User();}
}

WebMvcConfigurer配置类其实是Spring内部的一种配置方式,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter等等的东西对springmvc框架进行配置。(相当于spring-mvc.xml),除了该类还有其他几个类具有同样的功能:
在这里插入图片描述

Spring MVC注解开发,自定义配置类的三种方式:(使用前两种方式时,不会读取application.yml的配置,需要重写某些方法来保证一些默认配置)

  1. @EnableWebMvc+实现WebMvcConfigurer;不使用@EnableAutoConfiguration中的设置
  2. 扩展 WebMvcConfigurationSupport;不使用@EnableAutoConfiguration中的设置
  3. 实现WebMvcConfigurer;使用 @EnableAutoConfiguration 中的设置

自定义框架,可以自定义一些Handler、Interceptor、ViewResolver、MessageConverter。

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

@Configuration
@ComponentScan("com.ssm.controller")
@EnableWebMvc
public class SpringWebmvcConfig implements WebMvcConfigurer {
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
        registry.addResourceHandler("/../.html").addResourceLocations("/");
        registry.addResourceHandler("/../.js").addResourceLocations("/");
        registry.addResourceHandler("/../.css").addResourceLocations("/");
        registry.addResourceHandler("/../.png").addResourceLocations("/");
    }  //配置视图解析器,资源管理器,拦截器等

}

还启用注释扫描以释放静态资源。

web容器、web容器的配置文件web.xml及web容器的配置类

Web容器实际上是一个servlet,运行在Web服务器上。 web.xml是Web容器的配置文件,在Web服务器启动时自动加载。在ssm框架中,不需要servlet,取而代之的是DispatcherServlet作为主要的web容器,用来处理所有的请求。 web.xml 也是它的配置文件。

spring mvc框架中自带DispatcherServlet,只需要在配置文件web.xml中配置。在完全注解开发不需要在web.xml中配置任何东西。那么该如何配置DispatcherServlet呢?代替方案是web容器的初始化对象WebApplicationInitializer是随web应用启动而加载的 (相当于web.xml)AbstractAnnotationConfigDispatcherServletInitializer是已配置了DispatcherServle继承自AbstractDispatcherServletInitializer该类又集成WebApplicationInitializer(web.xml),于是通过继承后只需要进行属性的配置。

现在JavaConfig配置方式正在逐渐取代xml配置方式。 WebApplicationInitializer可以看作是Web.xml的替代品,它是一个接口。通过实现WebApplicationInitializer,您可以向其中添加servlet、侦听器等。当加载Web项目时,会加载这个接口实现类,从而起到与web.xml相同的作用。

AbstractDispatcherServletInitializer也可以配置DispacherServlet,但AbstractAnnotationConfigDispatcherServletInitializer更简单。

import com.ssm.config.SpringContextConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/** * 该类相当于web.xml主要用来配置DispatcherServlet和加载spring相关的配置类 * 目的是在tomcat启动时加载IoC容器 */
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
       //该类随tomcat的启动自动加载
    @Override
    protected Class<?>[] getRootConfigClasses() {
    
    // 根容器配置类
        return new Class[]{
    SpringContextConfig.class};
}

    @Override
    protected Class<?>[] getServletConfigClasses() {
    
        // web-mvc容器配置类
        return new Class[]{
    SpringWebmvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
    
        // 设置拦截的路径
        return new String[]{
    "/","*.action"};
    }
}

分别配置并加载spring的配置类、spring mvc的配置类和拦截路径。

javax.servlet.ServletContainerInitializer接口的实现类在Servlet3.0环境中,用于配置容器。

Spring提供了上述接口的实现类SpringServletContainerInitializer,SpringServletContainerInitializer反过来会找到实现WebApplicationInitializer的类,并将配置任务交给它们。

Spring 3.2中引入的AbstractAnnotationConfigDispatcherServletInitializer是WebApplicationInitializer的基本实现,因此当部署到servlet3.0容器时,容器会发现它的子类并使用子类来配置Servlet上下文。

可以在子类中重写三个方法:

  • getServletMappings():将一条或多条路径映射到DispatcherServlet;
  • getServletConfigClasses():返回带有@Configuration注解的类,用于配置DispatcherServlet;
  • getRootConfigClasses():返回带有@Configuration注解的类,用于配置ContextLoaderListener;

当DispatcherServlet启动时,它会创建一个Spring应用程序上下文并加载在配置文件或配置类中声明的bean;在 Spring Web 应用程序中,通常还有一个由 ContextLoaderListener 创建的上下文。

DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器以及处理器映射;
ContextLoaderListener加载应用中的其它bean,通常指驱动应用后端的中间层和数据层组件。
AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatcherServlet和ContextLoaderListener。是传统web.xml方式的替代方式。

AbstractAnnotationConfigDispatcherServletInitializer
参考

上面的位置控制器部分已经配置完毕。编写控制器:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    
    @GetMapping(value = "/test")
    public String method1(){
    
        return "test ok!";
    }
}

在这里插入图片描述

控制器部分的启动流程:

在这里插入图片描述

spring mybatis配置

控制器部分已经配置完毕,查询数据库内容,使用mybatis持久层。如何通过注解将mybatis与spring集成?

@映射器注解可以代替mapper映射文件,和mybatis-config.xml配置文件,该注解会生成一个静态的SqlSessionFactory,和动态的SqlSession然后调用getMapper()方法返回mapper对象。使用@Repository将该对象注入到IoC容器中。

pom 文件导入必要的依赖项:

   <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>

xml配置中,持久层有两个配置文件mybatis-config.xml和spring-mybatis.xml。这两个配置文件需要的关键信息是:

  1. DataSource对象包括driver、url、用户名、密码;
  2. SqlSessionFactoryBean对象,其作用是根据DataSource的信息创建一个静态的SqlSessionFactory;
  3. MapperScannerConfigurer对象,调用SqlSessionFactory动态生成Mapper。
public class MybatisConfig {
    
    // 注入SqlSessionFactoryBean
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
    
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 实体类别名包
        bean.setTypeAliasesPackage("com.ssm.pojo");
        return bean;
    }

    //配置mapper映射
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
    
        MapperScannerConfigurer mapperScanner=new MapperScannerConfigurer();
        //动态生成mapper的扫描目录
        mapperScanner.setBasePackage("com.ssm.dao");
        return mapperScanner;
    }

}
/** *** */
	@Value("${jdbc.driver}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    //配置数据源
    @Bean
    public DataSource dataSource(){
    
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        return dataSource;
    }

在根spring配置中需要使用@Import(MybatisConfig.class)引入mybatis配置类。DataSource对象既可以配置在spring根容器,也可以通过在mybatis配置类中配置在@Import引入。

至此,SSM完整的标注开发已经完成。对于业务部分,只需自动组装Mapper并正常编写接口即可。

四个配置类的主要内容

SpringContactConfig

import com.ssm.pojo.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import javax.sql.DataSource;

@Configuration

//开启注解扫描的路径
@ComponentScans({
    @ComponentScan("com.ssm.pojo"),@ComponentScan("com.ssm.service")})  //组件扫描位置,除控制器扫描所有类
// 加载数据库连接的配置的资源文件
@PropertySource("classpath:datasource.properties")
@Import(MybatisConfig.class)
public class SpringContextConfig{
    

    @Value("${jdbc.driver}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    //配置数据源
    @Bean
    public DataSource dataSource(){
    
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setPassword(password);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        return dataSource;
    }
}

SpringMvc配置

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

@Configuration
//开启mvc注解扫描
@ComponentScan("com.ssm.controller")
@EnableWebMvc
public class SpringWebmvcConfig implements WebMvcConfigurer {
    
	//释放静态资源
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    
        registry.addResourceHandler("/../.html").addResourceLocations("/");
        registry.addResourceHandler("/../.js").addResourceLocations("/");
        registry.addResourceHandler("/../.css").addResourceLocations("/");
        registry.addResourceHandler("/../.png").addResourceLocations("/");
    }  //配置视图解析器,资源管理器,拦截器等

}

Mybatis配置

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

import javax.sql.DataSource;

public class MybatisConfig {
    


    // 注入SqlSessionFactoryBean
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
    
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // 实体类别名包
        bean.setTypeAliasesPackage("com.ssm.pojo");
        return bean;
    }

    //配置mapper映射
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
    
        MapperScannerConfigurer mapperScanner=new MapperScannerConfigurer();
        mapperScanner.setBasePackage("com.ssm.dao");
        return mapperScanner;
    }

}

配置类其实和配置文件类似。配置文件被相关对象替换并与Web容器一起初始化。

Web.xml配置类WebConfig

import com.ssm.config.SpringContextConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/** * 该类相当于web.xml主要用来配置DispatcherServlet和加载spring相关的配置类 * 目的是在tomcat启动时加载IoC容器 */
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
       //该类随tomcat的启动自动加载
    @Override
    protected Class<?>[] getRootConfigClasses() {
    
    // 根容器配置类
        return new Class[]{
    SpringContextConfig.class};
}

    @Override
    protected Class<?>[] getServletConfigClasses() {
    
        // web-mvc容器配置类
        return new Class[]{
    SpringWebmvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
    
        // 设置拦截的路径
        return new String[]{
    "/","*.action"};
    }


}

上面的对象可能会有所不同,因为有子类或父类可以完成相同的功能,就像HttpServlet和GenericServlet都可以用作Web容器,但提供的功能数量不同。

所有配置类配置完毕后,编写测试接口:

```java
@RestController
public class TestController {
    

    @Resource
    private TestMapper testMapper;


    @GetMapping(value = "/test")
    public String method1(){
    
        return "test ok!";
    }

    @GetMapping(value = "/users")
    public List<User> method2(){
    
        List<User> users = testMapper.users();
        return users;
    }
}

在这里插入图片描述

资源中有配置完整注释的开发示例。下载它们以供参考。

. . .

相关推荐

额外说明

突破边界:文本检测算法的革新与应用前景

突破边界:文本检测算法的革新与应用前景 1.文本检测理论篇(文本检测方法介绍) 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。 文本在图像中的表现形式可以视为一种‘目标‘,通用的目标检测的

额外说明

go 服务接入短信验证码功能(对接阿里云平台)

简介 短信验证码还是比较常用的功能,已经有了很成熟的方案,本篇介绍的是对接阿里云的短信服务,一条短信大概两分钱。 基本的流程是: 到对应的云平台申请权限,大致费用都差不多 照着官方文档进行对接,并集成至自己的系统 简单说一下验证码的业务逻辑,需要注意的点

额外说明

【前端】前后端交互重点Ajaxの介绍及实战

❤️Ajax❤️ 每篇前言: 第一部分:JSON简介 效果展示: 第二部分:前后交互 1.此处介绍前后交互的两种方式: (1)利用form表单里的name属性进行前后端交互 HTML代码: Python代码: 如何实现: 效果展示: (2)利用AJAX进

额外说明

产品经理 | 智能视频监控系统软件设计(下)

前言:Hello大家好,我是小哥谈。随着人工智能技术的发展,智能视频监控系统的应用变得越来越广泛,其原理是利用摄像机采集视频信号,并通过相关的AI模型算法实时分析视频内容,提取出有用信息,如人脸、车牌号码、移动物体等,并进行识别及特征提取,最终形成监控报

额外说明

springboot整合达梦数据库

下载 dm jar包 我使用的Dm7JdbcDriver18-7.6.0.165.jar这个版本,网上都有自行下载 然后放在自己的包路径下 然后再pom文件: <dependency> <groupId>com.dm</groupId> <ar

额外说明

操作系统的目标与作用

操作系统系列文章:- 目录 - 文章目录 一、操作系统的目标 二、操作系统的作用 三、推动操作系统发展的主要动力 一、操作系统的目标 在计算机硬件上配置操作系统的主要目的是为了方便性、有效性、可扩充性、开放性。 ① 方便性 配置操作系统后,系统可以使用编

额外说明

25匹马,找出最快的3匹,只有5个赛道,每次比赛只能得到5匹马的速度排序,最少需要多少次比赛

红色可以看做预测第一名 绿色可以看做预测第二名 蓝色可以看做预测第三名   小组第一 小组第二 小组第三 小组第四 小组第五 小组A A1 A2 A3 A4 A5 小组B B1 B2 B3 B4 B5 小组C C1 C2 C3 C4 C5 小组D D1

额外说明

《天天数学》连载16:一月十六日

格言作者:威廉·莎士比亚(William Shakespeare,1564年4月23日—1616年4月23日),华人社会常尊称为莎翁,是英国文学史上最杰出的戏剧家,也是欧洲文艺复兴时期最重要、最伟大的作家,当时人文主义文学的集大成者,以及全世界最卓越的文

额外说明

wordpress入门主题_如何在WordPress中添加Twitter卡的入门指南

wordpress入口主题 您想将 Twitter 卡添加到您的 WordPress 网站吗? Twitter 卡使您可以将富媒体附加到链接到您的内容的推文中。这与在 Facebook 上共享链接非常相​​似,Facebook 会自动显示页面内容的预览、

额外说明

Nodejs安装教程

请移步阅读: https://blog.csdn.net/xijinno1/article/details/129574351 1、安装环境 本教程演示的环境:win 10 64位 node.js下载官网: Nodejs官方网站. 单击所选图标将其下载到

ads via 小工具