SpringBoot相关

SpringBoot

1. what

springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。

spring项目搭建的缺点:

  1. 配置麻烦
  2. 依赖繁多
  3. tomcat启动慢

2 .springboot的特点(why)

  • 自动配置

springboot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的

  • 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 辅助功能

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器tomcat、安全、指标,健康检测、外部配置等。

3. 搭建springboot的项目(how)

在这里插入图片描述

在这里插入图片描述

4. springboot常用的配置文件种类

springboot提供了两种配置文件。

  • 后缀为properties的文件
  • 后缀为yml的文件

不管是哪种,它们的前缀都是application

  1. yaml文件格式

    冒号后面有空格,空格后面才是自己要填写的值

    server:port: 8080servlet:context-path: /aaa
    
  2. properties文件格式

    spring.application.name=demo2spring.profiles.active=test
    student.name=lay
    student.age=18
    student.sex=man
    

如果上面两个文件同时存在,properties优先级高

5. springboot中java如何读取配置文件中的内容【重点】

我们习惯把一些自己的信息放入配置文件中,便于修改。比如OSS、支付等。我们还希望通过java代码能够读取到配置文件中自己的信息

springboot提供了两种方式用于读取springboot配置文件中信息的方式

  • 使用@ConfigurationProperties注解

使用在类上@ConfigurationProperties(prefix=“前缀”)

可以读取任意类型

在这里插入图片描述

  • Student类,将@ConfigurationProperties添加到实体类上
@ConfigurationProperties(prefix = "student")
@Component//为类创建spring,而且在创建时自动读取配置文件中前缀为student的属性
@Data
public class Student {//名称必须和配置文件中的名称一致private String name;private String age;private String sex;
}
  • Controller类
@RestController
public class StudentController {@Autowiredprivate Student student;@GetMapping("/info")public Student info(){return student;}
}

结果返回student中各个属性中的具体值

在这里插入图片描述

  • 使用@Value注解

它只能读取基本类型和字符串类型

在这里插入图片描述

  • controller层,将@Value注解添加到具体属性上
@RestController
public class StudentController {@Value("${student.name}")private String xm;@GetMapping("/info")public String info(){return xm;}
}

结果仅返回student中的具体姓名

在这里插入图片描述

  • @Component注解

    标注一个类为Spring容器的Bean,把普通pojo实例化到Spring容器中,相当于配置文件中的<bean id=“” class=“”/>

  • @ConfigurationProperties注解

    允许开发者将外部的配置属性自动绑定到 JavaBean 对象上

6. profile多环境配置【重点】

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都有修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的

  1. profile配置方式
    • 多profile文件方式
    • yml多文档方式
  2. profile激活方式
    • 配置文件
    • 命令行参数

我们需要针对不同的环境来创建不同的配置文件。使用profile来激活对应的配置文件

比如:

application-dev.properties  [开发环境的配置文件]
application-test.properties [测试环境的配置文件]
application-pro.properties [生产环境的配置文件]
------------------------------------------------
相同配置依然还是放在application.properties中
不同配置对应放置

在这里插入图片描述

如何激活对应的配置文件:两种方式

  • 在application配置文件中激活
#激活对应环境的配置文件
spring.profiles.active=pro
  • 部署时激活对应环境的配置
命令行参数:java –jar xxx.jar --spring.profiles.active=dev

7. springboot注册web组件

web组件表示的就是servlet,filter过滤器组件

回顾servlet组件步骤

  • 创建一个类并继承HttpServlet重写service方法
  • 注册到web.xml文件中
  • 创建一个类并继承HttpServlet重写service方法

    • 实例

      public class MyServlet extends HttpServlet {//重写父类中的方法.接受参数以及业务处理@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {System.out.println("代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");}
      }
      

      在web.xml文件中注册该servlet,后续有简化方法,即在相应的类中添加注解

      @WebServlet注解

      参数:name:该servlet的name

      ​ urlPatterns:该servlet的路径

  • 在web.xml文件中注册servlet

    • 实例

      <!--注册servlet--><servlet><!--servlet的名称可以随便起--><servlet-name>myServlet</servlet-name><!--指定自定义的servlet路径--><servlet-class>com.ykq.servlet.MyServlet</servlet-class></servlet><!--请求路径映射到该servlet--><servlet-mapping><!--保证该名称必须和上面注册的名称一致--><servlet-name>myServlet</servlet-name><!--路径,可以随意定义,但必须加/--><url-pattern>/my</url-pattern></servlet-mapping>
      

思考:在springboot中没有web.xml文件,如何注册servlet?

提供了一个配置类

创建一个Servlet

public class MyServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("~~~~~~~~~~~~~~~~");}
}

创建一个配置类

@Configuration
public class MyConfig {//注册servlet@Beanpublic ServletRegistrationBean myServlet(){ServletRegistrationBean bean=new ServletRegistrationBean<>();bean.setName("mys");bean.setServlet(new MyServlet());bean.addUrlMappings("/myServlet");return bean;}
}

回顾filter过滤器步骤

  1. 创建一个类并实现Filter接口,重写doFilter方法
  2. 注册到web.xml文件中
  • 创建一个类并实现Filter接口,重写方法
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {//初始化过滤器-只有一次}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//过滤规则System.out.println("====过滤器====");//放行filterChain.doFilter(servletRequest,servletResponse);System.out.println("===过滤器放行了===");}@Overridepublic void destroy() {//销毁过滤器-浏览器或服务器关闭时}
}
  • 在web.xml文件中注册
<!--注册过滤器--><filter><filter-name>MyFilter</filter-name><filter-class>com.ykq.filter.MyFilter</filter-class></filter><!--过滤规则--><filter-mapping><filter-name>MyFilter</filter-name><!--/*:表示拦截所有的请求/views/*: 只拦截包含views/资源/*.do: 拦截请求后缀未.do资源--><url-pattern>/*</url-pattern></filter-mapping>

spring如何注册filter,同注册servlet同理

创建一个filter

public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("经过了过滤器");}@Overridepublic void destroy() {Filter.super.destroy();}
}

创建一个配置类

@Configuration
public class MyConfig {//注册过滤器@Beanpublic FilterRegistrationBean myFilter(){FilterRegistrationBean filter=new FilterRegistrationBean();filter.setName("my");filter.setFilter(new MyFilter());filter.addUrlPatterns("/bn");return filter;}
}

@Configuration注解

是Spring的注解。

作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象

用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

8. springboot包扫描的原理

ssm项目必须加包扫描,而现在springboot没有写包扫描了

自动扫描主类所在的包

因为自带了包扫描的功能,核心在主类的注解@SpringBootApplication上,它是一个复合注解

里面包含@EnableAutoConfiguration开启自动配置

上述注解里面包含注解@AutoConfigurationPackage

上述注解里面包含注解@Import({AutoConfigurationPackages.Registrar.class}),需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描

如果我们不想让它扫描主类所在的包,我们可以使用@ComponentScan(basePackages={“”}来指定自己的包

在这里插入图片描述

通过@ComponentScan注解指定扫描自己的包,默认的包扫描消失

9. springboot的自动装配原理

我们原来的ssm项目,都需要加载前端控制器DispatcherServlet,而现在的springboot并没有加载DispatcherServlet。springboot具备自动装配的功能

springboot启动时,加载了使用@SpringBootApplication注解的类

该注解是一个复合注解,包含了@EnableAutoConfiguration注解,该注解开启了自动装配功能,该注解也是一个复合注解。

里面包含@Import({EnableAutoConfigurationImportSelector.class}),导入EnableAutoConfigurationImportSelector,该类自动装配选择器类,该类会自动加载很多自动装配。每个自动装配都会完成对应的自动装配功能。

在这里插入图片描述

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

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

相关文章

基于JAVA+SpringBoot+Vue+uniApp小程序的心理健康测试平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该系统由三个核心角色…

数据库MySQL下载安装

MySQL下载安装地址如下&#xff1a; MySQL :: Download MySQL Community Server 1、下载界面 2、点击下载 3、解压记住目录 4、配置my.ini文件 未完..

走进linux

1、为什么要使用linux 稳定性和可靠性&#xff1a; Linux内核以其稳定性而闻名&#xff0c;能够持续运行数月甚至数年而不需要重新启动。这对于服务器来说至关重要&#xff0c;因为它们需要保持长时间的稳定运行&#xff0c;以提供持续的服务 安全性&#xff1a; Linux系统…

【python算法学习1】用递归和循环分别写下 fibonacci 斐波拉契数列,比较差异

问题&#xff1a; fibonacci 斐波拉契数列&#xff0c;用递归和循环的方法分别写,比较递归和循环的思路和写法的差别 最直接的思路&#xff0c;是写递归方法 循环方法的稍微有点绕&#xff0c;我觉得问题主要是出在&#xff0c;总结循环的通项公式更麻烦&#xff0c;难在数学…

《Linux系统编程篇》vim的使用 ——基础篇

引言 上节课我们讲了&#xff0c;如何将虚拟机的用户目录映射到自己windows的z盘&#xff0c;虽然这样之后我们可以用自己的编译器比如说Visual Studio Code&#xff0c;或者其他方式去操作里面的文件&#xff0c;但是这是可搭建的情况下&#xff0c;在一些特殊情况下&#xf…

【深度学习基础】MAC pycharm 专业版安装与激活

文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍&#xff0c;包括其作用和主要功能&…

力扣-排序算法

排序算法&#xff0c;一般都可以使用std&#xff1a;&#xff1a;sort&#xff08;&#xff09;来快速排序。 这里介绍一些相关的算法&#xff0c;巩固记忆。 快速排序 跟二分查找有一丢丢像。 首先选择一个基准元素&#xff0c;一般就直接选择第一个。然后两个指针&#xff0c…

使用python获取城市经纬度以及城市间的距离、火车时间、所需成本等

这里写自定义目录标题 1 获取城市地理坐标2 获取交通数据3 数据存储4 代码整合 本案例研究选择了中国的五个中心城市&#xff08;上海市、深圳市、北京市、广州市、杭州市&#xff09;和25个边境城市&#xff08;如巴彦淖尔市、白山市等&#xff09;作为研究对象。通过调用高德…

Go泛型详解

引子 如果我们要写一个函数分别比较2个整数和浮点数的大小&#xff0c;我们就要写2个函数。如下&#xff1a; func Min(x, y float64) float64 {if x < y {return x}return y }func MinInt(x, y int) int {if x < y {return x}return y }2个函数&#xff0c;除了数据类…

vue实现a-model弹窗拖拽移动

通过自定义拖拽指令实现 实现效果 拖动顶部&#xff0c;可对整个弹窗实施拖拽&#xff08;如果需要拖动底部、中间内容实现拖拽&#xff0c;把下面的ant-modal-header对应改掉就行&#xff09; 代码实现 编写自定义指令 新建一个ts / js文件&#xff0c;用ts举例 import V…

前端的页面代码

根据老师教的前端页面的知识&#xff0c;加上我也是借鉴了老师上课所说的代码&#xff0c;马马虎虎的写出了页面。如下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</ti…

Databricks 收购 Tabular 的意义:数据开放框架的胜利

Databricks 宣布收购 Tabular&#xff0c;这是一个由 Apache Iceberg 的原始创建者开发的数据平台&#xff0c;在数据分析行业引发了涟漪。此次收购凸显了开放框架在数据领域日益增长的重要性&#xff0c;预示着数据管理、分析和 AI/ML 计划领域的创新、协作和可访问性的新时代…

QT实现自定义带有提示信息的透明环形进度条

1. 概述 做界面开发的童鞋可能都会遇到这样的需求&#xff0c;就是有一些界面点击了之后比较耗时的操作&#xff0c;需要界面给出一个环形进度条的进度反馈信息. 如何来实现这样的需求呢&#xff0c;话不多说&#xff0c;上效果 透明进度条 2. 代码实现 waitfeedbackprogressba…

如何在 CentOS 上配置本地 YUM 源

引言 CentOS 作为一个流行的企业级 Linux 发行版&#xff0c;依赖 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来管理软件包。YUM 源&#xff08;Repository&#xff09;是软件包存储和分发的中心&#xff0c;它们通常位于互联网上。然而&#xff0c;在某些情况下…

科技与水利的完美融合:从数据采集到智能决策,全面解析智慧水利解决方案如何助力水利行业实现智能化管理

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

c++ 多边形 xyz 数据 获取 中心点方法,线的中心点取中心值搞定 已解决

有需求需要对。多边形 获取中心点方法&#xff0c;绝大多数都是 puthon和java版本。立体几何学中的知识。 封装函数 point ##########::getCenterOfGravity(std::vector<point> polygon) {if (polygon.size() < 2)return point();auto Area [](point p0, point p1, p…

nodejs模板引擎(一)

在 Node.js 中使用模板引擎可以让您更轻松地生成动态 HTML 页面&#xff0c;通过将静态模板与动态数据结合&#xff0c;您可以创建可维护且易于扩展的 Web 应用程序。以下是一个使用 Express 框架和 EJS 模板引擎的基本示例&#xff1a; 安装必要的依赖&#xff1a; 首先&#…

mybatilsplaus 常用注解

官网地址 baomidou注解配置

医疗器械FDA |FDA网络安全测试具体内容

医疗器械FDA网络安全测试的具体内容涵盖了多个方面&#xff0c;以确保医疗器械在网络环境中的安全性和合规性。以下是根据权威来源归纳的FDA网络安全测试的具体内容&#xff1a; 一、技术文件审查 网络安全计划&#xff1a;制造商需要提交网络安全计划&#xff0c;详细描述产…

7-1、2、3 IPFS介绍使用及浏览器交互(react+区块链实战)

7-1、2、3 IPFS介绍使用及浏览器交互&#xff08;react区块链实战&#xff09; 7-1 ipfs介绍7-2 IPFS-desktop使用7-3 reactipfs-api浏览器和ipfs交互 7-1 ipfs介绍 IPFS区块链上的文件系统 https://ipfs.io/ 这个网站本身是需要科学上网的 Ipfs是点对点的分布式系统 无限…