Spring系列一品境之金刚境

Spring系列复习(一)


相关导航
Spring系列一品境之金刚境


Spring金刚境导航

  • Spring系列复习(一)
  • 前言
  • 一、Spring全家桶学习路线
    • 1、 思维导图
  • 二、系列基础概念梳理
    • 1、Spring
      • 1.1 Bean
      • 1.2 Injection(注入)
      • 1.3 DI(依赖注入)
      • 1.4 Spring ApplicationContext(应用上下文)
        • 1.4.1 IOC容器
        • 1.4.2 IOC容器类别
          • 1)Spring BeanFactory容器
          • 2)Spring ApplicationContext容器
      • 1.5 AOP(面向切面编程)
      • 1.6 Wire(装配)
      • 1.7 Annotion(注解)
      • 1.8 Servlet
      • 1.9 微服务
        • 1.9.1 微服务设计原则
        • 1)单一职责原则
        • 2)服务自治原则
        • 3)轻量级通信原则
        • 4)接口明确原则
      • 1.10 Cloud Native(云原生)
  • 三、SpringMVC(略)
  • 四、SpringBoot
    • 1、定义
    • 2、特性
    • 3、项目框架
      • 3.1 基础框架
        • 3.1.1 启动类格式
      • 3.2 解耦模块框架
        • 3.2.1 Maven中pom.xml文件解析
          • 1)Maven内置属性
          • 2)POM属性
        • 3.2.2 Maven的parent属性
        • 3.2.3 Spring Boot层级介绍与使用
          • 1)Controller层
          • 2)Service层
          • 3)Mapper层
          • 4)VO层
          • 5)Entity层
    • 4、配置文件
      • 4.1 application.yaml文件
        • 4.1.1 参数详解
      • 4.2 application.properties
    • 5、各层常用注解
      • 5.1 启动层
        • 5.1.1 @SpringBootApplication
        • 5.1.2 @SpringBootConfiguration
        • 5.1.3 @EnableAutoConfiguration
        • 5.1.4 @ComponentScan
      • 5.2 Controller层
        • 5.2.1 @Controller
        • 5.2.2 @RestController
        • 5.2.3 @RequestBody
        • 5.2.4 @RequestMapping
        • 5.2.5 @GetMapping
        • 5.2.6 @PostMapping
        • 5.2.7 @PathVariable
        • 5.2.8 @RequestParam
        • 5.2.9 @RequestHeader
        • 5.2.10 @CookieValue
      • 5.3 注入Bean
        • 5.3.1 @Autowired
        • 5.3.2 @Component
        • 5.3.3 @Bean
        • 5.3.4 @Bean产生一个bean的方法
        • 5.3.5 @Scope
      • 5.4 Service层
        • 5.4.1 @Service
      • 5.5 Entity层
        • 5.5.1 @Entity
      • 5.6 配置文件导入
        • 5.6.1 @PropertySource
        • 5.6.2 @ImportResource
        • 5.6.3 @Import
      • 5.7 全局异常处理
        • 5.7.1 @ControllerAdvice
        • 5.7.2 @ExceptionHandler
      • 5.8 事务注解


前言

本博文重在夯实Spring全家桶的知识点,回归书本,夯实基础,学深学精

Java相关基础已复习完毕,现在就到了Spring全家桶系列了,欲练神功,先固内功。之前做项目对Spring全家桶学的一知半解,好多基础概念都不清楚,正好借此机会梳理一下相关知识点。
参考书籍:《Spring In Action 5th EDITION》与《多线程与高并发 马士兵丛书》


 本博文主要归纳整理Spring全家桶的一系列概念、其AOP和IOC原理和常见注解

一、Spring全家桶学习路线

Spring全家桶
Spring容器
SpringMVC
SpringBoot
SpringCloud
SpringSecurity
其它组件
Mybatis-plus
Redis
RabbitMQ
Dubbo
云原生
反应式编程

1、 思维导图

请添加图片描述

二、系列基础概念梳理

1、Spring

  • Spring是一个开源的轻量级的Java开发框架,其中包括SpringMVC、SpringBoot、SpringCloud、SpringSecurity、反应式编程。

1.1 Bean

  • Bean是计算机自动生成的类,Bean是一个由Spring IOC容器实例化、组装和管理的对象
  • Bean并不是程序员编辑的,而是程序运行时,由Spring通过反射生成的
  • Spring通过依赖注入的方式来管理Bean之间的依赖关系

1.2 Injection(注入)

  • Spring注入可以理解为是对一个对象进行初始化,也就是省去new的这个步骤
  • 如果遇到修改,只需要改一处就行了。

1.3 DI(依赖注入)

  • Dependency Injection,是IOC的另一个名字,自动满足Bean之间的依赖
  • 是Spring协调不同Bean实例之间的合作而提供的一种工作机制,在确保Bean实例之间合作的同时,并能保持每个Bean的相对独立性
  • 创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入

1.4 Spring ApplicationContext(应用上下文)

  • 又称之为容器(container)
  • 负责对象整个生命周期的管理(创建装配销毁
  • 可以简单理解为工厂,负责造对象的
  • 利用IOC设计思想,Spring的核心之一

:Spring的设计模式是工厂模式

1.4.1 IOC容器

  • 全称是 Inversion Of Control,是一种设计思想,控制反转
  • 开发者不需自己主动创建对象管理对象之间的依赖关系,即将控制权交给IOC容器,负责对象的创建、管理和销毁
  • 简单来说,对象需要的时候,就自动地生成对象,不用再去创建
  • 要容器造什么对象、对象之间有什么依赖关系是由开发者自己决定的,自动满足Bean之间的依赖

1.4.2 IOC容器类别

1)Spring BeanFactory容器
  • 最简单的容器,给DI提供了基本的支持
  • 移动设备中为了节省有限的资源,会被优先选择,即主要用于轻量级应用
  • 包 org.springframework.beans.factory.BeanFactory
2)Spring ApplicationContext容器
  • 在Spring BeanFactory容器的基础上,添加了更多企业特定的功能,也就是比BeanFactory更加优秀更加牛逼了。
  • 包 org.springframework.context.ApplicationContext

1.5 AOP(面向切面编程)

  • Aspect Oriented Programming,面向切面编程
  • 通过预编译方式和运行期动态代理实现程序功能统一维护的一种技术
  • 是Spring框架中的一个重要内容,是函数式编程的一种衍生范型
  • 业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低

  • Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice
  • Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
  • Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
  • Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
  • Target(目标对象):织入 Advice 的目标对象.。
  • Weaving(织入):将Aspect和其他对象连接起来, 并创建 Adviced object 的过程

在这里插入图片描述

1.6 Wire(装配)

  • 一种是将Bean和属性进行对应,即将属性装配在Bean中
  • 一种是IOC/DI,就是控制反转/依赖注入,自动满足Bean之间的依赖

1.7 Annotion(注解)

  • 注解(Annotation)为Java代码提供元数据
  • 注解的属性也叫做成员变量。注解只有成员变量,没有方法
  • 想像代码具有生命,注解就是对于代码中某些鲜活个体的贴上去的一张标签
  • 详情请戳这个博客

1.8 Servlet

  • Server Applet,服务程序
  • 运行在服务器上的一个小程序,用来处理服务器请求

1.9 微服务

  • 微服务是针对与单体架构而言的,是项目开发的一种架构
  • 微服务得从两个方面去理解,什么是"微"、什么是"服务"
  • 微,狭义来讲就是体积小,所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立功能单元,是用户可以感知最小功能集
  • 微服务的目的是有效的拆分应用,实现敏捷开发部署,使各种服务淞耦合
  • 对于微服务架构来说,分布式几乎是必会用的技术,由于分布式本身的复杂性,导致微服务架构也变得复杂起来。
  • 不适合业务非常底层的系统,如操作系统内核存储系统数据库系统

1.9.1 微服务设计原则

1)单一职责原则

每个微服务只需要实现自己的业务逻辑就可以了,比如订单管理模块,它只需要处理订单的业务逻辑就可以了,其它的不必考虑。

2)服务自治原则

每个微服务从开发、测试、运维等都是独立的,包括存储的数据库也都是独立的,自己就有一套完整的流程,我们完全可以把它当成一个项目来对待。不必依赖于其它模块。

3)轻量级通信原则

首先是通信的语言非常的轻量,第二,该通信方式需要是跨语言、跨平台的,之所以要跨平台、跨语言就是为了让每个微服务都有足够的独立性,可以不受技术的钳制。

4)接口明确原则

由于微服务之间可能存在着调用关系,为了尽量避免以后由于某个微服务的接口变化而导致其它微服务都做调整,在设计之初就要考虑到所有情况,让接口尽量做的更通用,更灵活,从而尽量避免其它模块也做调整。

1.10 Cloud Native(云原生)

请添加图片描述

  • 应用原生被设计在以最佳方式运行,充分发挥云的优势
  • 云原生代表着原生为云设计 ,即充分利用云资源以云上运行为最佳目标设计应用
  • 云的出现,可以在提供各种资源之外,还提供各种能力,从而帮助应用,使得应用可以专注于业务需求的实现
  • 非业务需求相关的功能都被移到云,或者说基础设施中去了,以及下沉到基础设施的中间件
  • 像虚拟化、弹性扩展、高可用、高容错性、自恢复这些都是云的基本属性,云原生作为一种云计算,这是所具备的第一层含义
    请添加图片描述
    请添加图片描述

三、SpringMVC(略)

  • SpringMVC解决了V与C的交互问题,M是Model,V是View,C是Controller,是MCV架构
  • 在SpringMVC中,只使用了1个DispatcherServlet接收所有的请求,然后进行分发到不同的Controller中的某个方法,从而,减少Servlet对象的数量
  • 主要是通过接收分发请求减少Servlet对象的数量

四、SpringBoot

1、定义

Spring快速开发脚手架,通过约定大于配置的方式,快速构建和启动Spring项目。

2、特性

  • 快速开发Spring应用的框架
  • 内嵌Tomcat和 Jetty 容器,不需要单独安装容器,使用main方法就可以直接启动发布一个 Web应用
  • 简化 Maven 配置,通过继承parent构件 ,一站式引入需要的各种依赖(启动器),简化依赖管理【优化混乱的管理】
  • 通过约定大约配置的方式可以实现基于注解零配置思想【优化复杂的配置】
  • 和各种流行框架, Spring MVC , Mybatis , Spring Cloud 无缝整合

3、项目框架

3.1 基础框架

在这里插入图片描述

  • ① 直接用IDEA新建SpringBoot项目会默认生成的一些文件,根据个人查的资料是对于项目本身没用的,可以删除。
  • ②自动生成的SpringBoot启动类
  • ③自动生成的SpringBoot项目配置文件(或者是.yml文件格式),默认是空的,什么内容也没有,可以根据项目需求自行添加。
  • ④自动生成的项目test目录,写测试类时会用到。
  • ⑤项目的pom.xml文件,用来管理项目所有依赖。【进阶:可以利用parent来管理依赖】

3.1.1 启动类格式


import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.annotation.PostConstruct;
import java.util.TimeZone;@SpringBootApplication  //启动类注解
public class AdminApplication {  //启动类public static void main(String[] args) {  //main方法TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));SpringApplication.run(AdminApplication.class, args);  //启动操作}}

注:Spring Boot一般通过Maven构建工具管理项目,体现在pom.xml文件

3.2 解耦模块框架

以蘑菇博客为例,主要借助Maven的parent功能解耦。

3.2.1 Maven中pom.xml文件解析

  • Maven基本信息

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion>  //声明项目描述符遵循哪一个POM模型版本。//模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,//这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。<groupId>com.funtl</groupId>//公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,//如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade<artifactId>itoken-dependencies</artifactId>//本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的<version>1.0.0</version>//本项目目前所处的版本号<packaging>war</packaging>//打包类型,可取值:pom , jar , maven-plugin , ejb , war , ear , rar , par等等<name>itoken dependencies</name>//项目的名称, Maven产生的文档用,可省略<url>www.funtl.com</url>//项目主页的URL, Maven产生的文档用 ,可省略
</project>
  • 依赖关系
<project>...<dependencies><dependency><groupId>sample.ProjectB</groupId>//同上<artifactId>Project-B</artifactId>//同上<version>1.0</version>//同上<scope>compile</scope><optional>true</optional> <!-- value will be true or false only --></dependency></dependencies>
</project>

注意 <dependencies><dependencyManagement>的区别

  • <dependencies>
    相对于 <dependencyManagement>,所有声明在<dependencies>里的依赖都会自动引入,并默认被所有的子项目继承
  • <dependencyManagement>
    <dependencyManagement> 里只是声明依赖,并不实现引入

  • 继承关系
    通过<parent>实现
----父项目
<project>[...]<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.4</version><scope>test</scope></dependency></dependencies>[...]
</project>----子项目
[...]
<parent><groupId>com.devzuz.mvnbook.proficio</groupId><artifactId>proficio</artifactId><version>1.0-SNAPSHOT</version><relativePath>../ParentProject/pom.xml</relativePath>   
</parent>
[...]relativePath默认为…/pom.xml,如果路径不一样需要手动指定
  • 聚合关系 用于将多个maven项目聚合为一个大的项目
    通过<modules>实现
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org.maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.park.mvnDemo.account</groupId><artifactId>account-aggregator</artifactId><version>1.0.0-SNAPSHOT</version><packaging>pom</packaging><name>Account Aggregator</name><modules><module>account-email</module><module>account-persist<module></modules>
</project>
1)Maven内置属性
  • ${basedir} 项目的根目录(包含pom.xml文件的目录)
  • ${version} 项目版本
2)POM属性
  • ${project.build.sourceDirectory} 项目的主源码目录,默认为 src/main/java
  • ${project.build.testSourceDirectory} 项目的测试源码目录,默认为 src/test/java
  • ${project.build.directory} 项目构件输出目录,默认为 target/
  • ${project.outputDirectory}项目主代码编译输出目录,默认为 target/classes/
  • ${project.testOutputDirectory} 项目测试代码编译输出目录,默认为 target/test-classes/
  • ${project.groupId} 项目的 groupId
  • ${project.artifactId} 项目的 artifactId
  • ${project.version} 项目的 version,与${version}等价
  • ${project.build.fianlName} 项目打包输出文件的名称默认为"${project.artifactId}
    ${project.version}"

3.2.2 Maven的parent属性

可以分成多个目录进行解耦开发
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 主要可以分为基础功能模块工具组件管理端客户端辅助功能模块

  • 由于Maven的多模块聚合结构,父模块的<modules>记录着所有的子模块

  • 在每一个子模块中也都标明了自己的父模块配置信息

  • 父模块<modules>中记录了子模块的artifactId子模块<parent>也记录着父模块配置信息

  • 子模块中<parent>中的<relativePath>中记录的是父项目相对于子项目路径。这样的逻辑是,在构建子项目的时候首先根据相对路径找到父项目


子模块可以继承父模块的元素

  • groupId:项目组ID,项目坐标的核心元素
  • version:项目版本,项目坐标的核心元素
  • description:项目的描述信息
  • organization:项目的组织信息
  • inceptionYear:项目的创始年份
  • url:项目的URL地址
  • developers:项目的开发者信息
  • contributors:项目的贡献者信息
  • distributionManagement:项目的部署信息
  • issueManagement:项目的缺陷跟踪系统信息
  • ciManagement:项目的持续集成系统信息
  • scm:项目的版本控制系统信息
  • mailingLists:项目的邮件列表信息
  • properties:项目的依赖配置
  • dependencies:项目的依赖配置
  • dependencyManagement:项目的依赖管理配置
  • repositories:项目的仓库配置
  • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
  • reporting:包括项目的报告输出目录配置、报告插件配置等

	<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version></parent><modules><module>mogu_utils</module><module>mogu_base</module><module>mogu_xo</module><module>mogu_admin</module><module>mogu_web</module><module>mogu_picture</module><module>mogu_sms</module><module>mogu_search</module><module>mogu_monitor</module><module>mogu_gateway</module><module>mogu_zipkin</module><module>mogu_spider</module><module>mogu_commons</module></modules>

3.2.3 Spring Boot层级介绍与使用

一般的项目模块中都有EntityMapperVOServiceController层。
其关系如下
在这里插入图片描述
其中,这张图还少个Entity层,是在Mapper层下面。

1)Controller层
  • 控制请求和响应,负责前后端交互,分发请求
  • Controller层主要调用Service层里面的接口实现控制具体的业务流程
  • 控制的配置也要在配置文件(yml或者properties文件)中进行

在这里插入图片描述

2)Service层
  • 业务逻辑层,主要进行业务逻辑的具体实现
  • 分为两种类,一个是Service接口类,是具体逻辑的接口
  • 一个是ServiceImpl类,是对Service接口的实现类,实现接口中的具体方法
  • Service的Impl(实现类)是把MapperService进行整合的文件

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

3)Mapper层
  • 又称DAO层,是数据持久化层,简单理解为对数据库进行增删改查操作
  • 和Service层相同,分为两种类,一种是Mapper接口类,主要是数据库操作的接口
  • 另一种是MapperImpl即接口实现类,但Mybatis使用Java动态代理接口不需要实现类,直接通过Mapper.XML文件进行配置实现类

在这里插入图片描述

4)VO层
  • Object值对象
  • 用于业务层之间的数据传递仅仅包含数据
  • 前端的需要的数据做一个整合,打包成一个,方便前端获取数据
  • 类中属性可以和数据库表中字段,也可以不同

在这里插入图片描述

5)Entity层
  • 称为实体层,和数据库中表进行映射与对应
  • 只有一个Entity类,有getter和setter方法
Entity书写规范
1.java中包和类的建立和书写:包名可以自己定义,但最好是全部小写;包下边的类与接口全部使用驼峰命名规则。(首字母要大写,第二个单词的首字母也要大写。)注意:要新建**类而不是包**,包名和类名之间用点隔开可以写为entity.Student2.实体类与数据库的映射关系:entity包下的**实体类**要全部保持和数据库的**表名一致**;类**属性值**要与数据库**字段**对应。特别说明: 数据库的名应该在application.yaml中配置,连接数据库。3.如果数据库有d_id,在字段中要改为**驼峰**命名。4.类中属性的书写:private string  name权限    类型   属性名5.设置get、set方法的快捷键为:Alt+Inser

在这里插入图片描述

4、配置文件

我们可以通过配置文件来更改那些自动配置的属性。SpringBoot启动时加载该配置文件。Springboot默认的全局配置文件有两个,一个是application.properties,另一个是application.yaml

4.1 application.yaml文件

格式
k:空格)v //表示一对键值对(空格必须有);属性和值也是大小写敏感;
如
spring: profiles: active: prod 
spring:profiles: dev # 略去配置 
spring:profiles: test # 略去配置
spring:profiles: prod # 略去配置

4.1.1 参数详解

server:port: 8080//指定server的端口
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/vcd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 123456//指定Spring 连接池来源(这个写完之后会提示你导入相应的maven依赖)max-active: 30min-idle: 5validation-query: SELECT 1 FROM DUALmax-wait: 10000min-evictable-idle-time-millis: 30000//设置连接池的连接数量、时间等属性testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20//连接的动作和设置prepareStatementfilters: stat,wall,log4j2connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000web-stat-filter:enabled: trueurl-pattern: "/*"exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"stat-view-servlet:url-pattern: "/druid/*"allow: 0.0.0.0reset-enable: falselogin-username: adminlogin-password: admin//加入扩展插件thymeleaf:cache: false # 开发时关闭缓存,不然没法看到实时页面mode: LEGACYHTML5 # 用非严格的 HTMLservlet:content-type: text/html//模板渲染引擎配置

4.2 application.properties

相对于.yml文件,.properties文件使用属性赋值的方式进行配置文件的书写。

格式
属性(可多级,用.连接)=值
如
server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret

application.properties常用参数

5、各层常用注解

5.1 启动层

5.1.1 @SpringBootApplication

启动注解
@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan这三个注解

5.1.2 @SpringBootConfiguration

  • 继承@Configuration注解,主要用于加载配置文件
  • 标注当前类配置类
  • 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到Spring容器中,并且实例名就是方法名

5.1.3 @EnableAutoConfiguration

  • 开启自动配置功能
  • 帮助SpringBoot应用将所有符合条件的@Configuration配置加载到当前SpringBoot创建并使用的IOC容器。

5.1.4 @ComponentScan

  • 自动扫描并加载符合条件的组件或Bean定义,最终将这些Bean定义加载到容器中。
  • 通过basePackages等属性指定@ComponentScan自动扫描的范围

5.2 Controller层

5.2.1 @Controller

  • 控制器,处理Http请求。
  • 整体页面刷新提交的处理注解。

5.2.2 @RestController

  • 将方法返回的对象直接在浏览器上展示成json格式
  • 相当于@ResponseBody+@Controller合在一起的作用

5.2.3 @RequestBody

  • 通过HttpMessageConverter读取Request Body并反序列化为Object(泛指)对象

5.2.4 @RequestMapping

  • 将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上

5.2.5 @GetMapping

  • 将HTTP get请求映射到特定处理程序的方法
  • 简写:@GetMapping(value = “/say”)

5.2.6 @PostMapping

  • 将HTTP post请求映射到特定处理程序的方法注解

5.2.7 @PathVariable

  • 获取url中的数据
@Controller
@RequestMapping("/User")
public class HelloWorldController {@RequestMapping("/getUser/{uid}")public String getUser(@PathVariable("uid")Integer id, Model model) {System.out.println("id:"+id);return "user";}
}

5.2.8 @RequestParam

  • 获取请求参数的值
@Controller
@RequestMapping("/User")
public class HelloWorldController {
@RequestMapping("/getUser")
public String getUser(@RequestParam("uid")Integer id, Model model) {System.out.println("id:"+id);return "user";
}

5.2.9 @RequestHeader

  • 把Request请求header部分的值绑定到方法的参数上

5.2.10 @CookieValue

  • 把Request header中关于cookie的值绑定到方法的参数

5.3 注入Bean

5.3.1 @Autowired

  • @Autowired注解作用在构造函数、方法、方法参数、类字段以及注解上
  • @Autowired注解可以实现Bean的自动注入

5.3.2 @Component

  • 把普通Entity实例化到Spring容器中
  • @Component就是告诉Spring,我是Entity类,把我注册到容器中

5.3.3 @Bean

  • 一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里
  • 当Spring需要创建指定的一个对象时会调用被这个注解(@Bean)注解的方法

示例:Spring在需要自动创建Info对象时,自动调用这个方法。

@Configuration
public class BeanInit {/*** 测试@Bean的作用*/@Bean(name = "info")public Info getInfo(){return new Info("gfagduis", 2343);}@Bean(name = "info1")public Info getInfo1(){return new Info("gfagdufasfdfdais", 2343);}
}

5.3.4 @Bean产生一个bean的方法

  • @Bean明确地指示了一种方法,产生一个bean的方法,并且交给Spring容器管理。
  • 支持别名@Bean(“xx-name”)

5.3.5 @Scope

  • 作用在上和方法上,用来配置 Spring Bean 的作用域
  • 它标识Bean作用域
属性介绍
valuesingleton   表示该bean是单例的。(默认)prototype   表示该bean是多例的,即每次使用该bean时都会新建一个对象。request     在一次http请求中,一个bean对应一个实例。session     在一个httpSession中,一个bean对应一个实例。proxyModeDEFAULT         不使用代理。(默认)NO              不使用代理,等价于DEFAULT。INTERFACES      使用基于接口的代理(jdk dynamic proxy)。TARGET_CLASS    使用基于类的代理(cglib)

5.4 Service层

5.4.1 @Service

  • @Service是@Component注解的一个特例,作用在类上
  • @Service用于标注服务层组件,表示定义一个Bean
  • @Service注解作用域默认为单例
  • 使用注解配置和类路径扫描时,被@Service注解标注的类会被Spring扫描并注册为Bean
  • @Service使用时没有传参数,Bean名称默认为当前类的类名首字母小写
  • @Service(“serviceBeanId”)或@Service(value=”serviceBeanId”)使用时传参数,使用value作为Bean名字

5.5 Entity层

5.5.1 @Entity

  • @Table(name ="数据库表名"),这个注解也注释在实体类上,对应数据库中相应的
  • @Id、@Column注解用于标注实体类中的字段pk字段标注为@Id其余@Column

5.6 配置文件导入

5.6.1 @PropertySource

引入单个properties文件:@PropertySource(value = {"classpath : xxxx/xxx.properties"})引入多个properties文件:@PropertySource(value = {"classpath : xxxx/xxx.properties""classpath : xxxx.properties"})```

5.6.2 @ImportResource

  • 导入xml配置文件
  • 可以额外分为两种模式 相对路径classpath,绝对路径(真实路径)file
注意:单文件可以不写value或locations,value和locations都可用相对路径(classpath)引入单个xml配置文件:@ImportSource("classpath : xxx/xxxx.xml")引入多个xml配置文件:@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})绝对路径(file)引入单个xml配置文件:@ImportSource(locations= {"file : d:/hellxz/dubbo.xml"})引入多个xml配置文件:@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})取值:使用@Value注解取配置文件中的值@Value("${properties中的键}")
private String xxx;

5.6.3 @Import

  • 导入额外的配置信息
  • 可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar
@SpringBootApplication
@Import({SmsConfig.class})
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

5.7 全局异常处理

5.7.1 @ControllerAdvice

  • 统一处理异常
  • 定义全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
}

5.7.2 @ExceptionHandler

  • 注解声明异常处理方法
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)@ResponseBodyString handleException(){return "Exception Deal!";}
}

5.8 事务注解

  • 在Spring中,事务有两种实现方式,分别是编程式事务管理声明式事务管理两种方式
  • @Transactional注解

  • 编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,Spring推荐使用TransactionTemplate。
  • 声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用

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

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

相关文章

一品黄山 天高云淡

图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App 图片发自简书App …

一品多码商品档案建立,相同商品有多个不同的条码的进销存管理

一品多码 就是某个商品&#xff0c;可能存在多个条码。 比如&#xff1a;王老吉瓶装500ml&#xff0c;货号&#xff1a;000001&#xff0c;主条码&#xff1a;6956367338666 另外还有条码&#xff1a;69100000000001&#xff1b;69100000000088&#xff0c;都代表是&#xf…

hrbust 2340 一品五彩

一品五彩棒 Time Limit: 2000 MSMemory Limit: 256000 K Total Submit: 22(5 users)Total Accepted: 2(2 users)Rating: Special Judge: No Description 公元2017年11月19日&#xff0c;王权熊熊和东方平平因为妖馨斋出品的“一品五彩棒”棒棒糖大打出手。王权熊熊祭出神剑王权…

一品中的极品

阅读本文共约 4 分钟。 讲真&#xff0c;其实&#xff0c;我也曾经是个武侠迷&#xff0c;几乎接近疯狂&#xff0c;上初中时&#xff0c;那时候在镇上的学校上学&#xff0c;一周回一次家&#xff0c;学校的食堂伙食比较便宜&#xff0c;一顿饭5毛钱&#xff0c;我的一周生活费…

汤臣一品

“魔都_上海&#xff0c;曾经一套卖不出去的汤臣一品&#xff0c;如今价值百亿美元 “魔都"上海&#xff0c;曾经一套卖不出去的汤臣一品&#xff0c;如今价值百亿美元。_手机网易网 10月底(2017年)&#xff0c;汤臣一品大厦售出一套面积597平方米、总价2.05亿元豪宅&…

项目一品优购

1. 品优购项目规划 1.1 网站制作流程 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9022fbc2b77a4ee887e6f0d802ca0492.png?x-oss-processimage/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd3lfNDM0MzE4NjM,size_19,color_FFFFFF,t_70,g_se,x_16…

php网站源码 一品资源网,一品资源网自用官网模板源码下载站(带手机模板)...

★模板介绍★ 一品资源网自用官网模板源码下载站(带手机模板) 添加和原站下载内容页面的一样的动态会员升级提示滚动(php页面我做了注释&#xff0c;如果需要升级成功的会员显示&#xff0c;只需改动一下调用条件即可) 界面设计大气&#xff0c;带手机站同步PC站数据&#xff0…

解决 git 文件夹不显示绿色图标和红色图标的问题

问题描述&#xff1a;安装好git后&#xff0c;被管理的文件没有绿色图标和红色图标。 解决&#xff1a; 1. 修改注册表&#xff1a; Win r 打开运行窗口&#xff0c;输入 regedit.exe&#xff0c;如下图所示&#xff1a; 2.找路径&#xff1a; 依次找到如下路径&#xff1…

【已解决】【亲测有效】git绿色、红色图标不显示的问题

git绿色、红色图标不显示的问题 在使用git的过程中发现&#xff0c;项目文件上没有绿色图标&#xff0c;即使修改文件也没有红色图标显示&#xff0c;绿色图标是指提交成功的&#xff0c;红色图标是指修改后还未提交的&#xff1b;虽然文件没有图标显示&#xff0c;但是可以正…

GIT没有关联小图标(红色、绿色图标)解决方案

1、按WinR键打开运行对话框&#xff0c;输入 regedit.exe &#xff0c;准备修改注册表&#xff1b; 2、在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer文件夹下新建一个“字符串值”文件&#xff1a;名称为 “Max Cached Icons” (最大缓存图标) &…

使用Icon图标的几种方式

一.CSS Sprite 这也就是我们平时所说的雪碧图&#xff08;也叫精灵图&#xff09;&#xff0c;主要通过background-position属性来控制图片显示的位置&#xff0c;不过要注意的是图片是以左上角为坐标原点&#xff0c;坐标的变动应在第四象限内&#xff0c;及x的取值为0到正无…

桌面图标出现蓝色问号

问题&#xff1a; 因为之前用了代码库&#xff0c;所以装了Git&#xff0c;但是今天不小心手残右键时点错了&#xff0c;导致桌面图标出现了很多蓝色的问号&#xff0c;如下图&#xff0c;我只知道是Git搞得鬼&#xff0c;但却不知道该怎么处理&#xff0c;后来搜索了一番&…

修改任务栏程序图标

某些exe程序&#xff0c;在电脑运行时&#xff0c;会显示自己的图标&#xff0c;但是有时不太方便让其显示&#xff08;至于原因 你懂得&#xff09; 以微信为例&#xff0c;教你替换这种程序的图标 首先 我们要准备一个可操作exe文件的工具eXeScope&#xff0c;eXeScope工具…

git文件上绿色红色图标不显示的问题

由于项目使用的是git&#xff0c; 我在windows上安装了Git-2.22.0-64-bit.exe &#xff0c;安装完之后就可以使用git命令了。 这种不是很方便&#xff0c;于是就在eclipse上安装了git插件&#xff0c;用eclipse来操作git。 后来发现拉下来的项目代码没有红色绿色的图标。 于…

git文件标识添加绿色和红色图标

1.Win r 打开运行窗口&#xff0c;输入 regedit.exe 修改注册表&#xff0c;如下图所示&#xff1a; 2、按照文件的层次关系依次找到 HKEY_LOCAL_MACHINE\Software\Microsoft\windows\CurrentVersion\Explorer 3、然后修改键名 Max Cached Icons (最大缓存图标) 的值为 2000…

git显示不出绿色的小图标的解决方法

大家好&#xff0c;我是曜耀。今天我来为大家讲解一下&#xff0c;电脑安装git显示不了绿色的小图标的问题。 对于刚刚安装了git的我们&#xff0c;有一部分会遇到在操作过程&#xff0c;win会显示不出&#xff0c;git该用的图标&#xff0c;对此我们会很烦恼&#xff0c;我也是…

【更改应用图标】

1. 准备工作 应用图标是区分应用的重要方式。它还会出现在多个位置&#xff0c;包括主屏幕、“所有应用”屏幕和“设置”应用。 应用图标也可能会被称为“启动器图标”。启动器图标&#xff0c;是指当您点击 Android 设备的主屏幕按钮以查看和整理应用、添加微件和快捷方式等…

关于桌面文件,软件图标,带蓝底白问号的解决方法

出于工作需要换上了之前使用的电脑&#xff0c;但是那些软件安装路径涵盖范围我自己都分不清了&#xff0c;乱七八糟的文件夹和软件安装的路径都成一坨一坨的了&#xff0c;虽然不知道当年的我是怎么想的&#xff0c;但是现在的我强迫症犯了&#xff0c;把还记得的软件都搬家了…

【Git】git 文件夹不显示红色图标和绿色图标的问题

在使用git提交代码时&#xff0c;发现项目文件夹上没有红色图标和绿色图标。 红色图标表示修改后未提交的文件夹&#xff0c;绿色图标表示已提交的文件夹。 若使用过程中提交的文件过多的时候&#xff0c;文件夹不显示红色或绿色图标&#xff0c;导致不知道修改了哪些文件&am…

git 文件夹不显示红色图标和绿色图标的问题

在使用git提交代码时&#xff0c;发现项目文件夹上没有红色图标和绿色图标。 红色图标表示修改后未提交的文件夹&#xff0c;绿色图标表示已提交的文件夹。 若使用过程中提交的文件过多的时候&#xff0c;不知道修改了哪些文件&#xff0c;容易出现错误。 解决方法&#xff1…