SpringBoot入门

100 阅读5分钟

rmjq8oPnXI.jpg

相信好多小伙伴都是从ssm的年代走过来,繁琐的配置,写不完的xml配置文件,历历在目。直到它的出现,哇,美妙-SpringBoot。主打入门❤️

Get start

  • 创建个Maven工程:pom
<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version> 
</parent>

<dependencies> 
    <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
</dependencies>
  • 主程序
@SpringBootApplication 
public class HelloWord01 {
    public static void main(String[] args) { 
        SpringApplication.run(HelloWord01.class,args); 
    } 
}
  • 这时一个简单的SpringBoot程序就完成了。。。
  • 那么如何打包部署呢,这个和以往的就不同了,不是打成war包,而是jar包,需要在pom.xml中添加:
<build> 
    <plugins> 
        <plugin> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId> 
        </plugin>
    </plugins> 
</build>
  • 编译成可执行文件,然后通过 java -jar 项目名 这样的命令进行执行

spring-boot-starter 介绍

  • spring-boot场景启动器,帮我们导入所依赖的组件
  • spring-boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里边引入这些starter,那么所有的依赖就都会导进来。要用什么功能,就导入什么功能的启动器。
  • 其中所有的依赖都在parent项目中仲裁好了,如果我们要调整一些依赖,比如我的mysql版本是5.7 需要5.X的驱动包,可以直接在pom中添加:(这其实是maven的特性)
<properties> 
    <mysql.version>5.1.20</mysql.version> 
</properties>

@SpringBootApplication

  • SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;下面是@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

  • SpringBoot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类;他的注解信息其实就是一个配置类

@Configuration

  • 配置类上来标注这个注解
  • 配置类 ----- 配置文件;配置类也是容器中的一个组件;类似@Component

@EnableAutoConfiguration

  • 开启自动配置功能;以前我们需要配置的东西,SpringBoot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效
  • 其中的@AutoConfigurationPackage注解中用import的方式导入了一些组件,看源码发现是将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
  • @Import(EnableAutoConfigurationImportSelector.class)注解的内容是:给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件

Spring-Boot的配置

  • SpringBoot使用一个全局的配置文件,配置文件名是固定的;
  • application.properties
  • application.yml

yml的语法格式

  • k:(空格)v:表示一对键值对(空格必须有)
  • 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
  • 属性和值也是大小写敏感
  • 值的写法
    • 字面量:普通的值(数字,字符串,布尔)
      • k: v:字面直接来写
      • 字符串默认不用加上单引号或者双引号
      • "":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
      • name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
      • '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
      • name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
    • 对象、Map(属性和值)(键值对):
      • k: v:在下一行来写对象的属性和值的关系;注意缩进
      • 对象还是k: v的方式
riends: 
  lastName: zhangsan 
  age: 20 

#行内写法: 
friends: {lastName: zhangsan,age: 18}
  • 数组(List、Set):
    • 用- 值表示数组中的一个元素:
pets: 
   cat 
   dog 
   pig 

#行内写法: pets: [cat,dog,pig]

配置文件值注入

@ConfigurationProperties

  • 通过@ConfigurationProperties注解,告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;prefix = "student":配置文件中哪个下面的所有属性进行一一映射。只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能,所以需加上@Component
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
    private String lastName;
    private Integer age;
    private Boolean bos;
    private Date birth;
    orivate MapcString,Object> maps;
    private List<Object> lists;
    private Dog dog;
}
  • @Value获取值和@ConfigurationProperties获取值比较:
@ConfigurationPropertiesoValue
功能批量注入配置文件中的属性一个个指定
松散绑定( 松散语法 )支持不支持
SpEL不支持支持
SR303数据校验支持不支持
复杂类型封装支持不支持
  • 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
  • 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties
  • 这个@ConfigurationProperties注解默认加载的是全局配置文件-application.yml 这个文件里的内容,但是这样不太好。因为这个全局的配置文件是配置springboot 的一些信息的
  • 如果是我们自己的变量 好一点的办法是新写一个自己的配置文件:xxx.properties,指定自定义的配置文件使用@PropertySource注解。(只能用于properties文件)

@ImportResource

  • @ImportResource:导入Spring的配置文件,让配置文件里面的内容生效
  • Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
  • 想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上(就是标注在@Configuration注解上):
@ImportResource(locations = ("classpath:student.xml"})
@SpringBootApplication
public class SpringBooApplication {}