Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式, Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapid application evelopment)成为领导者。 其特点如下:

  • 创建独立的 Spring 应用程序
  • 嵌入的 Tomcat或者Jetty等Servlet容器
  • 提供生产就绪型功能,如指标,健康检查和外部配置
  • 自动配置 Spring,绝对没有代码生成和对 XML 没有要求配置

    配置文件

    spring-boot的默认配置文件为appliaction.yaml,配置文件直接放在当前工程目录中。spring-boot会自动找到该配置文件并解析。

  • 多环境配置,spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果未激活则会使用默认的配置。

  • 代码配置,通过@profile注解直接将代码转换为配置文件类,在激活不同配置时,会选用不同的类来实现逻辑。
  • 命令行配置,在命令行运行时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识。所以,java -jar xxx.jar —server.port=8888命令,等价于我们在application.properties中添加属性。

    注解

    Spring Boot为了开发者从复杂的xml文件中解放出来,提供了丰富注解来实现同样的功能。

    创建Beans注解

  • @Componet: 泛指组件类,就是在自身定位不明确的时候使用,标识一个受Spring管理的Bean组件 ,同样可以用@Repository, @Service, @Controller来替代它

  • @Service 表明这是业务层的组件
  • @Repository: 用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常
  • @Configuration 表明为配置类,用于xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法等价于spring的xml配置文件中的,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
  • @Bean 标注在方法上,将该方法返回的对象注册为Bean
  • @Value 设定该属性的值,可以直接读取配置文件

    Beans行为注解

  • @PostConstruct 在初始化完成之后执行的操作,一般执行顺序为@Constructor > @Autowired > @PostConstruct

  • @PreDestory 在Bean销毁之前创建
  • @Scope 指定对象在spring中的创建方式
  • @Lazy 是否惰性加载Bean对象,也就是getBean 方法获取它时,它才会进行 Bean 的初始化,完成依赖注入;默认不使用懒加载。

    注入Beans注解

  • @Autowired 默认byType查找,可跟@Qualifier搭配byName查找

  • @Qualifier byName注入Bean对象。在@Configuration注解的类中,还可以注解在方法的参数上,来实现依赖
  • @Resource @Resource并不是spring原生包中注解,而是javax.annotation.Resource包中的注解,默认byName查找bean
  • @Conditinal 根据当前环境或者自定义函数选择注入的Bean

    • @ConditionalOnBean 存在某类的实例才注册
    • @ConditionOnMissingBean 不存在某类的实例才注册

      其他注解

  • @NonNull 可以标注在方法、字段、参数之上,表示对应的值不可以为空,(标识注解,无作用)

  • @Nullable 注解可以标注在方法、字段、参数之上,表示对应的值可以为空(标识注解,无作用)
  • @ComponentScan 指定spring从哪些包以及下级包中寻找bean
  • @SpringBootConfiguration 是@Configuration注解的派生注解,跟@Configuration注解的功能一致
  • @EnableAutoConfiguration
  • @Order https://blog.csdn.net/yaomingyang/article/details/86649072, 注入到list中
  • @Profile 将配置经进行分类

    MVC注解

  • @Controller: 注解的bean会被spring-mvc对外提供http接口

  • @ResponseBody:将java对象转为json格式的数据
  • @RequestBody :将请求方法写入Java对象,对应swagger中paramType=”body”
  • HttpServletRequest 获取完整的http请求
  • @ModelAttribute
  • @RequestHeader, 对应swagger中paramType=”header”
  • @RequestParam, 对应swagger中paramType=”query”
  • @PathVariable, 对应swagger中paramType=”path”

Q:

  • 如何实现一个springboot-starter
  • undertow,基于NIO的高性能Web服务
  • 测试:Junit, Hamcrest, Mockito
  • spring-boot的策略:开箱即用,约定优于配置
  • ApplicationReadyEvent事件
  • @dependsOn, @Conditional, 因该是判断是否存在配置
  • 不同Bean之间相互引用,各个方法的加载顺序是什么
  • @Bean(initMethod = “open”, destroyMethod = “close”)
  • Order(1)

参考:
spring-demo:https://github.com/ityouknow/spring-boot-examples
spring注解:https://blog.csdn.net/fansili/article/details/78740877
spring-boot获取配置方式:https://www.jianshu.com/p/748fc4d5bae6
依赖注入的三种方式:https://www.cnblogs.com/chansblogs/p/8343930.html
https://blog.csdn.net/xindoo/article/details/86408810
Spring-boot:https://www.jianshu.com/p/ffe5ebe17c3a
https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/