1.启动springboot引入的依赖(pom.xml的配置)

  • 引入父项目(依赖管理)
    父项目的父项目中声明了所有需要依赖的版本号(自动版本仲裁机制)
    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version></parent>
  • 如果需要其他版本
    在父项目的父项目中查找到对应依赖的version版本的key
    然后在当前pom.xml中的key中规定版本号即可(例如mysql驱动)
<properties><myesql.version>5.0<mysql.version>
</properties>
  • starter场景启动器
    引入starter场景启动器,已经包含所有常规需要的依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

+所有场景底层依赖
都有spring-boot-starter的依赖,此为springboot自动配置的核心依赖

  • 简化打包部署策略
    用了一下后可以直接打包成jar包直接在目标服务器上执行
<build >
<plugins>
<plugin >
<groupId> org.springframework.boot </groupId >
<artifactId> spring- boot-maven- plugin </artifactId >
</plugin>
</plugins>
</build >

2.springboot配置好依赖后

  • 书写主程序
    用@SpringBootApplication来声明为一个主程序类
  • 默认扫描:主程序所在的包以及其下面的子包会被默认扫描
    用@springbootapplication自定义扫描包
  • 注意
    • 容器的重要性:
      各种配置文件都是映射到某一个类中,配置文件的值绑定到某一个类中,然后该类在容器中创建对象
    • 按需加载:
      spring-boot-autoconfigure包中虽然包含有很多类,但是如果没有引入对应的依赖,里面的类也不会装配

3.容器功能的组件配置

  • @Configuration设置当前类为配置类(用来导入bean的或者初始化等同于xml文件)

    • 参数proxyBeanMethods = false,表明我们当前的类为正常类,可以通过方法获取一个新的组件(调用方法返回为新创建)
    • 参数proxyBeanMethods = true,表明我们当前类为代理类,装入容器时运用代理类装入,调用方法时用代理类的方法,即会到容器中查找(调用方法返回仍为容器中)
    • 使用中:组件依赖设置为true,其他为false
    • @bean 设置当前类中的方法(方法名为bean id 返回类型为bean 的类型 返回值为具体组件)
  • @Impont({User.class,DBHelper.class}) 声明在配置类中
    导入这两个类到容器中(调用无参构造)
  • @ConditionalOnMissingBean(name = “tom”)声明在当前类中
    只有当bean中没有tom时,才会注入当前类中的bean
  • @ImportResource(“classpath:beans.xml”) 声明在配置文件中
    引入原生的配置文件

    • 里面可以配置各种bean
  • @Component @ConfigurationProperties(prefix = “mycar”) 两者都声明在当前类中
    为当前类自动装配并且运用springboot的配置文件中的mycar.属性来初始化bean
  • @EnableConfigurationProperties(car.Class) 声明在配置类中@ConfigurationProperties(prefix = “mycar”)声明在当前类中

4.自动配置原理

4.1拆分注解

  • @SpringBootApplication可分为一下注解

    • @SpringBootConfiguration 代表当前是一个配置类
    • @EnableAutoConfiguration
      • @AutoConfigurationPackage 自动配置包
        给容器中导入指定包下的所有组件
        利用Registere给容器中导入一系列组件,传入参数为当前主类名,然后再register中会将该类所在的包下的所有组件批量注册
      • @Import({AutoConfigurationImportSelector.class})给容器中批量导入组件
        利用getAutoConfigurationEntry(annotationMetadata)方法中获取候选配置组件,里面会默认扫描当前所有包中的META-INF/spring.factories的文件,spring-boot-autoconfigure中的META-INF/spring.factory下写死了启动的容器中加载的配置组件(?AutoConfiguration),其包有127个场景自动配置默认全部加载,最终按需配置
      • 按需配置:里面全都有按条件加载的注解,并不能完全装在ConditionalOnMissingBean(name = “tom”)声明在当前类中
    • @ComponentScan(com.atguigu.boot) 代表一个包扫描
      指定扫描的包

4.2注解底层

  • 例如是否导入DispacherServlet组件

    • 找到@SpringBootApplication下的@EnableAutoConfiguration 下的@Import({AutoConfigurationImportSelector.class})中默认扫描
    • 找到spring-boot-autoconfigure中的默认扫描位置中中找到了DispacherServletAutoconfigure
    • 在包中找到了DispacherServletAutoconfigure的配置类
    • 在配置类中看是否满足按需加载的条件(满足)
    • 配置类中有一个@bean就返回了DispacherServlet类型的组件
      这个bean中已经配置好了关于DispacherServlet的配置
    • 故导入了DispacherServlet
  • 例如是否导入文件解析器组件(防止用户配置的上传解析器名字不符合规范)
    • 前面寻找方式一样
    • 最后再配置类中有一个@bean返回了一个文件解析器组件
      • 其中要求容器中有这个类型的组件
      • 容器中没有默认名的这个组件
    • @bean的方法传入文件解析器类型的组件(@bean的形参传入的对象默认都会在容器中寻找)
    • 该@bean直接返回了该组件(并且修改了名字为默认名)
  • 例如是否导入文件解析器(用户有了就用用户的,没有则创建)
    • 前面寻找方式相同
    • 最后判断@ConditionOnMissiongBean没有则创建,有则不创建
  • 总结
    • springboot先加载所有的自动配置类
    • 每个自动配置类按照条件进行生效,默认都会绑定配置中指定的值。即properties和配置类(bean)进行了绑定。注意:该值可以在我们的application.properties中进行配置(全都有默认值)
    • 每个生效的配置类会给容器中装配很多组件
    • 只要容器中有这些组件,这些功能就有
    • 只要用户有自己配置的,则以用户的为准
  • 获取值
    • autoconfiguration(加载配置类)
    • 组件(配置类生效后创建bean)
    • ?properties也为一个配置类(bean的默认值从?properties配置类中获取)
    • 最终回归到application.properties的配置的前缀中
  • 例如获取缓存的配置
    • 找到依赖包的spring-boot-autoconfigure-2.3.4.RELEASE.jar

      • 其下的META-INF/spring.factories包含了导入的配置
    • 在org中找到cache下的CacheAutoConfiguration
    • CacheAutoConfiguration的配置文件@EnableConfigurationProperties({CacheProperties.class})
    • 然后找到CacheProperties类
      @ConfigurationProperties(prefix = “spring.cache”)
    • 最终我们只需要在application.properties中写spring.cache.XXX来配置即可

4.3最佳实践

  • 引入场景依赖
    https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
  • 查看自动配置(选底层原理)
    debug=true 开启自动配置
    \negetive不生效 \positive生效
  • 是否需要修改
    • 参照文档修改配置

      • https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter

      • 例如:如下可以自定义启动图片

      • 自己分析 绑定了哪些前缀(观看源码)

    • 自定义或者替换组件
      • @bean,@conponent
    • 自定义器

5.开发技巧

5.1 lombok

  • 开发javabean 有参无参 setget 重写tostring
  • 在Controller中引入slf4j的日志功能
  • 步骤
    • 引入依赖
    • 安装插件plugin(在setting中的插件搜索下载)
    • 使用注解
      • @Data 生成get set方法
      • @ToString 生成tostring方法
      • @AllArgsConstructor和@NoArgsConsturctor为有参无参构造器(定制构造器自己写)
     <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

5.2 dev-tools

  • 热更新 项目实时改变 ctrl F9即可实时改变(重写编译一遍)
    严格意义上检测到文件有变化 则重启
    如果是静态文件,则不重启,直接用
  • 使用:
   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>

5.3 spring initializr(项目初始化向导)

  • 直接可以选择依赖
  • 直接帮我们创建好文件结构
    • 创建springboot的核心配置文件
    • 创建了主程序

springboot1:项目启动相关推荐

  1. 为什么当项目启动后执行两次过滤器 再进行访问资源时执行一次过滤器

    为什么当项目启动后执行两次过滤器 再进行访问资源时执行一次过滤器 粗线的理解,启动项目后进行了两次请求,访问两次过滤器.访问资源时只进行一次请求,所以访问一次过滤器. 于是为了更加清楚地看清在启动项目 ...

  2. 智汇医工 创享未来:国家标准《健康医疗信息安全指南》验证项目启动会成功举办...

    为贯彻落实国家大数据战略,推进健康医疗大数据工作的开展,数据科学研究院于2019年01月19日联合项目申请方--北京清华长庚医院.清华大学软件学院.临床医学院--召开了国家标准<健康医疗信息安全 ...

  3. 配置项目启动的时候就加载 servlet

    load-on-startup值为0 就是在项目启动的时候自动加载该servlet

  4. web项目启动时 初始化加载系统参数 获取无法自动注入的服务

    2019独角兽企业重金招聘Python工程师标准>>> 在web.xml里面配置监听 项目启动时 直接初始化上下文 <listener><display-name& ...

  5. Eclipse项目启动不了

    当你的Eclipse项目启动不了多半是[eclipse工程jdk版本]的问题 在eclipse中项目jdk版本不匹配的时候需要修改项目工程的jdk版本,但是网上的一些版本修改不是很完全,经过一些摸索之 ...

  6. springboot2.X 在项目启动后执行一段自定义代码

    场景: 项目需要在项目启动后从数据库初始化一些数据进入redis , 但是没有很适合 的监听器去实现 , 监听 老是在dao初始化之前触发. 解决方法:自定义类实现 ApplicationRunner ...

  7. springboot:SpringBoot项目启动成功,但无法访问且提示404

    当SpringBoot项目启动成功后,访问controller下的接口却发现无法访问,且提示status=404 我的项目中controller下只有一个测试接口,接口名为MainController ...

  8. 项目启动时socket自动启动_spring boot 项目在启动时调用接口

    1.环境 目前开发的项目使用的spring boot(2.1.4.RELEASE)+ssm 2. 需求 现在有一个数据处理任务的接口,在spring boot项目启动后,可以手动的去启动任务,但是这样 ...

  9. Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源

    在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...

最新文章

  1. 【精简教程版】100行代码入手天池CV赛事
  2. shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性...
  3. 京东数据驱动下的个性化推荐
  4. raspberry树莓派NFS搭建
  5. 使用Lua编写whireshark插件
  6. 什么是微调(Fine Tune)?什么时候使用什么样的微调?【数据量和数据相似度决定】
  7. 网页版深度学习模型编辑器,搭建运行样样都行,还能3D可视化
  8. 互联网大厂“抢填”高考志愿
  9. matlab prn文件,PRN文件扩展名 - 什么是.prn以及如何打开? - ReviverSoft
  10. 实测 | 分羹无线市场 天融信无线AP究竟有多强?
  11. 第二类增值电信业务经营许可证在哪里办?
  12. 如何让win7在桌面显示ie图标
  13. 小程序对企业、商家有哪些方面的好处?
  14. 如何在SVN中忽略某个文件或文件夹
  15. 要闻君说:阿里云联合8家芯片模组商推出“全平台通信模组”;北汽与小桔车服联合“京桔”;IBM要帮助印度公司打造5G战略!...
  16. 【文本展开收起】uniapp—实现文本的展开与收起功能
  17. 指纹识别属于计算机技术,指纹识别技术主要涉及四个功能,是哪四个呢?
  18. android pixelflinger 研究,Android Pixelflinger 研究
  19. 【diffusion】扩散模型详解!理论+代码
  20. 画图时屏幕闪烁的原因和解决方法

热门文章

  1. COBIT+2019框架治理和管理目标(资料下载)
  2. JSP页面传值到JSP页面
  3. python实现多张多格式图片转PDF并打包成exe
  4. DC中wire_load_model与wire_load_mode
  5. 如何使用GoldWave合成音乐?
  6. 帮忙写基于SSM框架的购物商城管理系统
  7. [前端工坊]第二届京东技术节-前端技术实践专场
  8. 计算机毕业设计Python+uniapp联影医疗器械管理系统小程序(小程序+源码+LW)
  9. Scrapy框架的使用之Scrapy爬取新浪微博
  10. python用途谷歌浏览器-python调用chrome ie等浏览器