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.mzph.cn/bicheng/45374.shtml

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

相关文章

关于斯坦福TTT,大家难道没啥可唠的嘛~?

TTT与transformer也好或manba也好它们之间背后的本质思想&#xff0c;表面上来看是对上下文进行状态表征压缩&#xff0c;再细想来看&#xff0c;均是一种对输入自身结构的一种线性建模变换&#xff0c;不过三者间所采用线性建模方法和策略各有不同和优劣&#xff0c;而TTT在这…

【C++ Primer Plus】学习笔记1

文章目录 前言一、预备知识二、基本语法1.main函数2.有返回值的函数C程序应当为程序中使用的每个函数提供原型3.自定义函数 总结 前言 一直没系统学过C&#xff0c;最近接触了一段时间Java发现还是不太喜欢&#xff0c;所以转向C开发了qaq。因为学过C语言不算零基础了&#xf…

软件杂志软件杂志社软件编辑部2024年第4期目录

基金项目论文 “互联网”环境下智慧教育支撑平台的架构研究 黄孔曜; 1-3 基于机器学习的Web网络爬虫算法优化研究 刘俊培;贾继洋;班岚;迟欢;孙沛叶; 4-7 基于Ant Design Pro的物流系统前端开发与用户体验优化研究 王菊雅; 8-10《软件》投稿&#xff1a;cnqikantg12…

【建议收藏】一万字图文并茂,终于有人把GPT的玩法整理全了

1. 学生常用 1.1 辅导作业、写作业 打数学建模和写期末作业~ Openai GPT-4o 模型从 2024 年 5 月发布以来&#xff0c;作为各项性能评测综合第一的 GPT。 对于法律类&#xff0c;语言类的作业&#xff0c;随意秒杀了&#xff01;&#xff01; 所以我决定让他做一道高等数学…

keepalived+nginx实现高可用

1. keepalived需要了解的知识 1.1 业务场景&#xff1a; 如果我们有个网站&#xff0c;最开始只有一台服务器对用户提供服务&#xff0c;业务架构图如下&#xff1a; 当业务量增大时&#xff0c;这台服务器支撑不了那么大的流量&#xff0c;随时会出现宕机的风险&#xff0c;…

Dr4g0nb4ll靶机

信息收集 使用arp-scan生成网络接口地址&#xff0c;查看ip 输入命令&#xff1a; arp-scan -lnmap扫描端口开放 TCP 输入命令&#xff1a; nmap --min-rate 10000 -p- 192.168.187.184 //以最低10000的发包速率扫描全部端口可以看到目标只开放http的22和80端口 UDP …

鸿蒙Harmony--文本组件Text属性详解

金樽清酒斗十千&#xff0c;玉盘珍羞直万钱。 停杯投箸不能食&#xff0c;拔剑四顾心茫然。 欲渡黄河冰塞川&#xff0c;将登太行雪满山。 闲来垂钓碧溪上&#xff0c;忽复乘舟梦日边。 行路难&#xff0c;行路难&#xff0c;多歧路&#xff0c;今安在&#xff1f; 长风破浪会有…

2024最新国际版抖音TikTok安装教程,免root免拔卡安卓+iOS,附全套安装工具!

我是阿星&#xff0c;今天给大家带来是2024年最新TikTok国际版抖音的下载和安装教程&#xff0c;而且还是免root免拔卡的那种&#xff0c;安卓和iOS都能用哦&#xff01;由于某些原因&#xff0c;国内用户并不能使用TikTok。今天阿星就教一下大家怎么安装TikTok。 TikTok在全球…

张爱华:身残志坚谱写人间大爱 推己及人彰显巾帼风采

张爱华&#xff0c;女&#xff0c;1963年2月出生&#xff0c;响水县聚贤养老协会会长、响水县小尖镇爱华老年公寓院长。张爱华因患小儿麻痹症导致下肢重度残疾&#xff0c;但她身残志坚&#xff0c;通过创办服装厂慢慢走上致富之路。2011年&#xff0c;她先后筹资、贷款600多万…

UART串口通信实验

一.通信种类 1.1按照数据通信方式 1.1.1串行通信 优点&#xff1a;占用的引脚少&#xff0c;成本低 缺点&#xff1a;传输速度慢 适用场合&#xff1a;长距离、低速率的通信场合 1.1.2并行通信 优点&#xff1a;传输速率快 缺点&#xff1a;占用引脚多&#xff0c;成本…

【开源项目的机遇与挑战】探索、贡献与应对

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一&#xff1a;开源项目的发展趋势 &#x1f343;开源项目的蓬勃发展现状 &#x1f343;开…

VSCode 远程反复输入密码不能链接问题解决

通过 vscode 远程连接服务器时出现了连接不上&#xff0c;而且一直要循环输入密码的问题&#xff0c;可能是因为上次异常退出导致。 主要解决思路是删除当前 vscode 远端服务后&#xff0c;重新建立连接。 解决方法一 在 vscode 端接口删除 vscode 服务。 View->Commond…

vue 使用腾讯地图 标点 自定义瓦片 折线配置

vue 使用腾讯地图 标点 自定义瓦片 折线配置 申请腾讯地图秘钥 key 腾讯地图开发者 https://lbs.qq.com/dev/console/application/mine 腾讯地图开发文档 https://lbs.qq.com/webApi/javascriptGL/glGuide/glOverview 添加 key 代码中引入 // 入口文件 index.html // 填…

【通信原理】其实QPSK就是一种特殊的QAM,即4-QAM

文章目录 幅度调制和相位调制QPSK(Quadrature Phase Shift Keying)QAM(Quadrature Amplitude Modulation)QPSK作为4-QAMQPSK(Quadrature Phase Shift Keying)和QAM(Quadrature Amplitude Modulation)都是数字调制技术,用于在无线信号中传输数据。要理解“QPSK其实就是…

新旧电脑数据转移方法

随着科技的发展和电脑性能的不断提升&#xff0c;许多用户在工作和生活中都需要更换新电脑。当我们购买了一台新电脑后&#xff0c;如何将旧电脑中的数据转移到新电脑上成许多用户关注的问题。本文将详细介绍几种有效的电脑数据转移方法&#xff0c;帮助大家顺利完成数据迁移。…

国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)

windows系统也适用&#xff0c;该插件可同时支持windows和国产系统 在实际项目开发中&#xff0c;以下场景可能会用到Word局部编辑功能&#xff1a; 合同审批公文流转策划设计报告汇签单招投标&#xff08;标书文件&#xff09;其他&#xff0c;有模板且需要不同人员协作编辑…

06.TMS570LC43入门指南——中断操作

06.TMS570LC43入门指南——中断操作 文章目录 06.TMS570LC43入门指南——中断操作一、简介二、中断&#xff08;VIM&#xff09;介绍2.1 VIM架构2.2 CPU 中断处理2.3 VIM中断通道映射2.4 中断请求默认分配 三、项目实现3.1 硬件部分3.2 软件部分3.2.1 HALCoGen 配置3.2.2 CCS 配…

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候&#xff0c;利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task&#xff0c;mode为model为自己需要的内容后&#xff0c; 执行以下语句 cd …

在Linux上搭建服务器之综合实验(web,dns,防火墙,SELinux)

其实验简图如下&#xff1a; 解读&#xff1a; 本实验需要完成4部分内容&#xff0c;web服务器的搭建&#xff0c;主从dns服务器的搭建&#xff0c;防火墙的开启&#xff0c;以及SELinux设置为强制模式。 首先dns主服务器上配置web服务&#xff08;其中我本机的IP为192.168.5.…

thinkphp 生成邀请推广二维码,保存到服务器并接口返回给前端

根据每个人生成自己的二维码图片,接口返回二维码图片地址 生成在服务器的二维码图片 控制器 public function createUserQRcode(){$uid = input(uid);if