SSM 注解配置方式整合

文章目录

  • Bean注解
  • 使用注解方式代替 web.xml 文件
  • Spring注解方式整合Mybatis
  • 事务管理器配置
  • 请求与响应
  • @EnableWebMvc 注解
  • REST 风格
  • RestController
  • ComponentScan
  • 静态资源放行
  • 表现层数据封装
  • @EnableAspectJAutoProxy(AOP注解方式)
  • AOP 通知获取数据(参数,返回值,异常)
  • 异常处理器
  • 项目异常处理
  • 拦截器
  • Maven 相关
    • 分模块开发
    • 依赖传递
    • 可选依赖与排除依赖
    • 依赖冲突
    • 聚合
    • 继承
    • 属性
    • 配置文件加载属性
    • 版本管理
    • 多环境开发
    • 跳过测试
    • 私服


Bean注解

用户自定义的类可以用 @Service、@Controller 等注解将其标注,使用注解扫描方式使得 Spring 去创建这些 bean 对象。
Q:第三方的类如何使用注解方式使 Spring 去创建呢?
A:@Bean 注解声明

DataSourceConfiguration.java

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Bean("dataSource")public DataSource getDataSource(User user) throws PropertyVetoException {System.out.println("-----加载数据源-------");System.out.println(user);ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass(driver);dataSource.setJdbcUrl(url);dataSource.setUser(username);dataSource.setPassword(password);return dataSource;}}

SpringConfiguration.java

@Configuration
@ComponentScan("com.xmu")
@Import({DataSourceConfiguration.class})
public class SpringConfiguration {
}

第三方 bean 依赖注入

  • 引用类型:方法形参
    在这里插入图片描述

  • 简单类型:成员变量

在这里插入图片描述

使用注解方式代替 web.xml 文件

ServletContainersInitConfig.java

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMVCConfig.class};}protected String[] getServletMappings() {return new String[]{"/"};}@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{filter};}
}

pom.xml 中导入插件

<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins>
</build>

在这里插入图片描述

Spring注解方式整合Mybatis

DataSourceConfig.java

@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Bean("dataSource")public DataSource getDataSource() throws PropertyVetoException {ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass(driver);dataSource.setJdbcUrl(url);dataSource.setUser(username);dataSource.setPassword(password);return dataSource;}// 事务管理器@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager ds = new DataSourceTransactionManager();ds.setDataSource(dataSource);return ds;}
}

使用注解方式使 Spring 容器去产生 Mapper 类的对象
MybatisConfig.java

public class MybatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage("com.xmu.domain");ssfb.setDataSource(dataSource);return ssfb;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.xmu.mapper");return msc;}}

事务管理器配置

首先在 SpringConfig 上加 @EnableTransactionManagement 注解
在这里插入图片描述

配置 事务管理器的 Bean
在这里插入图片描述
接口上加 @Transactional
在这里插入图片描述

请求与响应

请求体中有数据,转换成 Java 对象,Controller 层方法形参 ➕ @RequestBody;
请求参数中有数据,转换成 Java 对象,Controller 层方法形参 ➕ @RequestParam;

@RequestMapping("/addUsers")
public void addUsers(@RequestBody List<User> userList){
}@RequestMapping("/addNames")
public void addNames(@RequestParam List<String> nameList){
}

@EnableWebMvc 注解

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
在这里插入图片描述

@EnableWebMvc:可以开启由 json 数据 转换成对象的开关
eth:请求体中是 Json 数据,而 Controller 层方法形参是 Java 对象

@Configuration
@ComponentScan("com.xmu.controller")
@EnableWebMvc  // 可以开启由 json 数据 转换成对象的开关
public class SpringMVCConfig {@Beanpublic ViewResolver viewResolver(){InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/pages/");resolver.setSuffix(".jsp");resolver.setExposeContextBeansAsAttributes(true);return resolver;}
}

REST 风格

@RequestMapping("/user/{id}")
public void method(@PathVariable Integer id){}

在这里插入图片描述

RestController

@RestController = @Controller + @ResponseBody

ComponentScan

@ComponentScan(value = "com.xmu",excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)
)

静态资源放行

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
在这里插入图片描述
其它方式解决

SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
在这里插入图片描述

步骤:
在这里插入图片描述
在这里插入图片描述

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {// 静态资源放行registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");registry.addResourceHandler("/js/**").addResourceLocations("/js/");registry.addResourceHandler("/css/**").addResourceLocations("/css/");}
}

表现层数据封装

后端响应格式
在这里插入图片描述

设置统一数据返回结果类
在这里插入图片描述
在这里插入图片描述

设置统一数据返回结果编码在这里插入图片描述

Controller 层根据操作结果返回 Result
在这里插入图片描述

@EnableAspectJAutoProxy(AOP注解方式)

启动 AOP注解开发
在这里插入图片描述
在这里插入图片描述

AOP 通知获取数据(参数,返回值,异常)

获取切入点参数
在这里插入图片描述
在这里插入图片描述

这里 proceed 的 args 可以不传递(效果一致),但是如果要对参数修改的话,传递的时候一定要传 args 参数

在这里插入图片描述

获取返回值
returning 参数指定接收返回值的对象名称,一般这里的对象用 Object 类型接收,此处的 JoinPoint 参数可写可不写,写的话要放在前面的位置。

在这里插入图片描述

获取异常

在这里插入图片描述
在这里插入图片描述

异常处理器

在这里插入图片描述

  1. 声明这个类是做异常处理的(@RestControllerAdvice)
  2. 在这个类中实现一个方法处理异常(@ExceptionHandler(异常类型))

在这里插入图片描述
在这里插入图片描述

项目异常处理

1. 自定义异常类

在这里插入图片描述

2. 自定义异常编码

在这里插入图片描述

3. 触发自定义异常

在这里插入图片描述

4. 拦截并处理异常

在这里插入图片描述

5. 前端效果

在这里插入图片描述

拦截器

  1. 编写拦截器类实现 HandlerInterceptor 接口,并实现它的方法,用 @Component 注解将其加入 Spring 容器
    在这里插入图片描述
  2. 实现 addInterceptors方法,添加拦截的 Bean 与拦截路径

在这里插入图片描述
3. 开启注解扫描这两个类

在这里插入图片描述

注意:SpringMvcSupport 继承 WebMvcConfigurationSupport 与 @EnableWebMvc 同时使用会失效
在这里插入图片描述
其它方式解决

SpringMVCConfig 去实现WebMvcConfigure 接口的方法,这样就不用 SpringMvcSupport 继承 WebMvcConfigurationSupport,而且也不用扫描 config
在这里插入图片描述

Maven 相关

分模块开发

依赖传递

可选依赖与排除依赖

依赖冲突

在这里插入图片描述

聚合

继承

属性

配置文件加载属性

版本管理

多环境开发

跳过测试

私服

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125795.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文详解动态链表和静态链表的区别

1、引言 本文主要是对动态链表和静态链表的区别进行原理上的讲解分析&#xff0c;先通过对顺序表和动态链表概念和特点的原理性介绍&#xff0c;进而引申出静态链表的作用&#xff0c;以及其概念。通过这些原理性的概述&#xff0c;最后总结归纳出动态链表和静态链表的区别。本…

Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘

就是我在反序列化时&#xff0c;遇到这样一个警告&#xff1a; Unchecked cast: java.lang.Object to java.util.ArrayList<com.work1.Student>然后我去网上查&#xff0c;有些人说用SuppressWarnings(“unchecked”)去忽略警告&#xff0c;但是我觉得作为一名合格的程序…

小谈设计模式(20)—组合模式

小谈设计模式&#xff08;20&#xff09;—组合模式 专栏介绍专栏地址专栏介绍 组合模式对象类型叶节点组合节点 核心思想应用场景123 结构图结构图分析 Java语言实现首先&#xff0c;我们需要定义一个抽象的组件类 Component&#xff0c;它包含了组合节点和叶节点的公共操作&a…

二项分布以及实现

文章目录 前言所谓二项分布就是只会产生两种结果的概率 1.概念 前言 所谓二项分布就是只会产生两种结果的概率 1.概念 下面是一个二项分布的的theano实现 import numpy as np import theano import theano.tensor as T from theano.tensor.nnet import conv from theano.ten…

[图论]哈尔滨工业大学(哈工大 HIT)学习笔记16-22

视频来源&#xff1a;2.7.1 补图_哔哩哔哩_bilibili 目录 1. 补图 1.1. 补图 2. 双图 2.1. 双图定理 3. 图兰定理/托兰定理 4. 极图理论 5. 欧拉图 5.1. 欧拉迹 5.2. 欧拉闭迹 5.3. 欧拉图 5.4. 欧拉定理 5.5. 伪图 1. 补图 1.1. 补图 &#xff08;1&#xff09;…

Redis最常见应用场景

缓存&#xff08;Cache&#xff09; Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。 在该场景下&#xff0c;有一些存储于数据库中的数据会被频繁访问&#xff0c;如果频繁的访问数据库&#xff0c;数据库负载会升高&#xff0c;同时由于数据库IO比较慢&…

实时人脸五观检测:基于libfacedetection(CNN模型)

一、前言 随着人工智能技术的不断发展,人脸检测已成为计算机视觉领域的重要应用之一。人脸检测是一种将输入图像中的人脸位置和轮廓提取出来的技术,广泛应用于人脸识别、智能监控、人机交互等领域。利用libfacedetection开源的人脸检测库,实现人脸检测。 libfacedetection…

【网络安全---sql注入(2)】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。

前言 本篇博客主要是通过piakchu靶场来讲解如何通过SQL注入漏洞来写入文件&#xff0c;读取文件。通过SQL输入来注入木马来getshell等&#xff0c;讲解了比较详细的过程&#xff1b; 如果想要学习SQL注入原理以及如何进行SQL注入&#xff0c;我也写了一篇详细的SQL注入方法及…

【再识C进阶4】详细介绍自定义类型——结构体、枚举和联合

学习目标&#xff1a; 在上一篇博客中&#xff0c;我们已经详细地学习了字符分类函数、字符转换函数和内存函数。那这一篇博客和上一篇博客的关系不是那么相连。 这一篇博客主要介绍一下自定义类型&#xff0c;因为在解决实际问题时&#xff0c;由于世界上的因素有很多&#xf…

Windowsold文件夹作用以及删除方法

引言 2021年6月24日&#xff0c;微软正式发布全新操作系统Windows 11。Windows 11系统于2021年10月5日开始全面推送。2021年10月以后生产的电脑已经预装Windows 11系统。刚开始会有一部分人不适应win 11系统&#xff0c;会选择退回win10。现在win11已经推出了稳定版&#xff0…

【C++】Vector -- 详解

一、vector的介绍及使用 1、vector的介绍 https://cplusplus.com/reference/vector/vector/ vector 是表示可变大小数组的序列容器。 就像数组一样&#xff0c;vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问&#xff0c;和数组一…

JS使用setInterval导致堆溢出

问题描述 使用setInterval运行较长一段时间后出现堆溢出的情况。 代码类似于 setInterval(sendHeartbeat, 30000);function sendHeartbeat() {axios.get(url).then(res > {console.log("success")}).catch(err > {console.error(err.message);}) }在一些老…