目录
一、 引言
为什么要用SpringBoot?
相信大家已经发现SSM(spring+springMVC+Mybatis)项目随着项目的迭代而项目中需要编写的xml配置文件也变得特别杂冗繁多,这个时候不利于我们敏捷式开发,而SpringBoot就可以解决这个问题
SpringBoot如何实现敏捷开发?
springboot遵循约定大于配置,什么意思呢? 简言之就是如果没有自主配置 项目就会使用springboot的内置的默认配置,当然如果springboot的默认配置不能满足需求 可以自定义配置
springboot默认只有一个.properties 或yml文件
二、 构建SpringBoot项目
2.1快速构建SpringBoot
项目简单构建完成后的项目结构如下图:
-src
-main
-java
-包名
启动类.java # 需要将controller类,放在启动类的子包中或者同级包下
-resources
-static # 存放静态资源的
-templates # 存储模板页面的
application.properties # SpringBoot提供的唯一的配置文件
-test # 只是为了测试用的
2.2 简单测试
2.2.1 pom.xml导入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2.2 编写简单的Controller代码
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello SpringBoot!";
}
}
2.2.3 启动SpringBoot内置tomcat
运行启动类的三种方式
①:运行main方法即可
②:在maven控制台输入命令 mvn spring-boot:run
③:将当前项目打包成一个jar文件,并通过java -jar jar文件
2.2.4 浏览器输入请求地址
可以看到成功在页面输出 “Hello SpringBoot!”
三、 SpringBoot常用注解
3.1 @Configuration和@Bean
-
之前使用SSM去开发时,在xml文件中编写bean标签,但是SpringBoot不推荐使用xml文件。
-
@Configuration注解相当于beans标签
-
@Bean注解相当于bean标签
-
id=“方法名 | 注解中的name属性(优先级更高)”
-
class=“方法的返回结果”
@Configuration // 代表当前类是一个配置类
public class UserConfig {
@Bean(name = "user1") // 构建一个实例,放到spring容器中
public User user(){
User user = new User();
user.setId(1);
user.setName("张三");
return user;
}
/*
<beans ....> @Configuration
<bean id="user1" class="com.hrp.demo01.entity.User" />
</beans>
*/
}
3.2 @SpringBootApplication
@SpringBootApplication就是一个组合注解:
-
@SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
-
@EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类通过load方法,以for循环的方式,一个一个加载。,加载META-INF/spring.factories配置类(已经开启的)。
-
好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。
-
坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。
-
手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
-
-
@ComponentScan就相当于<context:component-scan basePackage=“包名” />,帮助扫描注解的。
3.3 @ComponentScan
组件扫描。让spring Boot扫描到Configuration类并把它加入到程序上下文。
@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。
3.4 @Repository
用于标注数据访问组件,即DAO组件。
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
3.5 @Service
一般用于修饰service层的组件
3.6 @RestController
用于标注控制层组件(如struts中的action),表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器;它是@Controller和@ResponseBody的合集。
3.7 @ResponseBody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
3.8 @Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
3.9 @AutoWired
byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。
3.10 @RequestMapping
RequestMapping是一个用来处理请求地址映射的注解;提供路由信息,负责URL到Controller中的具体函数的映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
3.11 @RequestParam
用在方法的参数前面。例:
@RequestParam String a =request.getParameter(“a”)。
3.12 @PathVariable
路径变量。参数与大括号里的名字一样要相同。例:
RequestMapping(“user/get/mac/{macAddress}”)
public String getByMacAddress(@PathVariable String macAddress){
//do something;
四、 SpringBoot常用配置
4.1 SpringBoot的配置文件格式
SpringBoot的配置文件支持properties和yml,甚至他还支持json。
更推荐使用yml文件格式:
-
yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置
-
yml文件,相比properties更轻量级一些
yml文件的劣势:
-
严格遵循换行和缩进
-
在填写value时,一定要在: 后面跟上空格
4.2 多环境配置
在application.yml文件中添加一个配置项:
spring: profiles: active: 环境名
在resource目录下,创建多个application-环境名.yml文件即可
在部署工程时,通过 java -jar jar文件 --spring.profiles.active=环境
4.3 引入外部配置文件信息
和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容。
如果在yml文件中需要编写大量的自定义配置,并且具有统一的前缀时,采用如下方式
// Java程序
@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
private String xxxx;
private ... ...;
}
// 配置文件
aliyun:
: xxxxxxxxx
...
4.4 热加载
4.4.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
4.4.2 settings配置
ctrl+shift+alt+/ =====>registry=====>compiler.automake.allow.when.app.running 打勾