络腮胡菲菲 发表于 2024-12-5 02:59:33

微服务springboot详细解析(一)

目次
1.Spring概述
2.什么是SpringBoot?
3.第一个SpringBoot程序
4.配置参数优先级
5.springboot自动装配原理
6.@SpringBootApplication&SpringApplication.run
7.@ConfigurationProperties(prefix = "")
 8.@Validated数据校验
29、聊聊该如何写一个网站_哔哩哔哩_bilibili
学习门路:【狂神说Java】SpringBoot最新教程IDEA版平常易懂_哔哩哔哩_bilibili
https://i-blog.csdnimg.cn/direct/17c4004b313247cda914e34759cebc6e.pnghttps://i-blog.csdnimg.cn/direct/1a256fec05e2414e9159b132ac0d270f.png
1.Spring概述

Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架
目的:Spring是为了解决企业级应用开发的复杂性而创建的,简化开发
那么Spring是如何简化Java开发的?为了低落Java开发的复杂性,Spring采用了以下4种关键策略:

[*]基于POJO的轻量级和最小侵入性编程
[*]通过IOC、DI和面向接口实现松耦合
[*]基于切面(AOP)和惯例进行声明式编程
[*]通过切面和模版淘汰样式代码
2.什么是SpringBoot?

学过javaweb的就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat,在前端跑出一个Hello Wolrld程序,是要履历特别多的步调;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会有其他web框架出现;什么是SpringBoot呢,就是一个javaweb的开发框架而已,和SpringMVC类似,对比其他javaweb框架的利益,官方说是简化开发,约定大于配置(核心思想,越是简化的东西越是有规定,比如文件夹的上下位置、定名都是有规定的),you can"just run",能迅速的开发web应用,几行代码开发一个http接口即可。
所有的技能框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景衍生一种规范框架,人们只必要进行各种配置而不必要本身去实现它,这时候强大的配置功能成了优点;发展到一定水平之后,人们根据实际生产应用环境,选取此中实勤奋能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。
约定大于配置场景:maven、spring、springmvc、springboot、docker...
程序猿的程序 = 数据结构 + 算法(集合框架map、list)
码农的程序 = 面向对象 + 框架
3.第一个SpringBoot程序

看懂pom.xml文件:4、第一个springboot程序_哔哩哔哩_bilibili
在前端发出hello请求
若想要实现热摆设,在创建项目时勾选DevTools即可
https://i-blog.csdnimg.cn/direct/dc03c85e17014ec398fd8cc0f075da02.png
4.配置参数优先级

https://i-blog.csdnimg.cn/direct/c8a780bbb9684512a3bb49cdcc4c981a.pnghttps://i-blog.csdnimg.cn/direct/4d9fee60d271440c87569397fc68adb1.png
此外,如果你在类似优先级位置同时有application.properties和application.yml,那么application.properties里的属性内里的属性就会覆盖application.yml
微服务 SpringBoot 2.0(二):配置文件解析 - 简书
5.springboot自动装配原理

如果面试的时候问到springboot,谈谈明白,能聊的有自动装配和run()方法,在下面视频10min处7、了解下主启动类怎么运行_哔哩哔哩_bilibili
狂神说SpringBoot02:运行原理初探 - 遇见狂神说 - 博客园
6.@SpringBootApplication&SpringApplication.run

首先我们来看一段启动代码:
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
    }
} 从上面代码来看,@SpringBootApplication 和 SpringApplication.run长得很相似,但是前者是一个注解,后者是一个SpringApplication类的静态方法,首先我们来看@SpringBootApplication
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
} 首先我们来分析@SpringBootConfiguration,在此之前我们要知道@Configuration(它与@Bean是一套的,一个是配置类一个是组件),任何一个标注了@Configuration的Java类界说都是一个JavaConfig配置类,凡是经过该注解修饰的,均被实例化到Spring应用程序上下文中,由spring统一管理生命周期,也就是IOC
至于第二部分SpringApplication.run,分析该方法紧张分两部分,一是SpringApplication实例化,二是run方法的执行,请看以下流程图:
https://i-blog.csdnimg.cn/direct/f657ebdc57224e0495c4746c3c30861a.png
最紧张的功能在我看来有两个:

[*]推断应用的类型是平常的项目还是Web项目
[*]推断并设置main方法的界说类,找到运行的主类(这也就是为什么run方法要传入启动类的字节码文件)
微服务 SpringBoot 2.0(三):启动分析之@SpringBootApplication - 简书
微服务 SpringBoot 2.0(四):启动分析之SpringApplication.run - 简书
7.@ConfigurationProperties(prefix = "")

如下所示在application.yml中给person配置属性
person:
id: 12345
name: tianming
age: 18 然后实现实体类与配置类绑定,Person就有值了(大概@Value一个一个绑定)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private int id;
    private String name;
    private int age;
}  8.@Validated数据校验

Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式:
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated//数据校验
public class Person {

    @Email(message="邮箱格式错误") //name必须是邮箱格式
    private String name;
} 常见参数如下所示:
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
   
Booelan检查
@AssertTrue   验证 Boolean 对象是否为 true
@AssertFalse    验证 Boolean 对象是否为 false
   
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前
@Future   验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则 额外保举阅读,总结springboot学习的知识:61、聊聊现在和将来_哔哩哔哩_bilibili

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 微服务springboot详细解析(一)