SpringBoot
1.SpringBoot简介
在刚接触SSM框架的时候,想必都会被这个框架的配置文件所烦扰,需要自己手动配置的东西非常多,哪怕有些东西自己不需要也是需要配置的。而SpringBoot此时就应运而生,减少了大家的配置过程。相信都听过“约定优于配置”的这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提供不必要的配置,可是使用Spring或者SpringMVC的话依然有许多这样的东西需要我们进行配置,这样不仅徒增工作量而且在跨平台部署时容易出问题。简单来说就是使用SpringBoot可以快速构建一个能够运行的Spring项目。
1.1 SpringBoot优点
- 能够快速构建一个能够独立运行的Spring项目
- 内嵌有Tomcat容器,无需配置Tomcat
- 提供了许多starter,简化了许多的配置
- 无代码生成,没有xml的配置
2.第一个SpringBoot项目启动
2.1 项目搭建
介绍完Springboot以后,让我们开始搭建一个简单的“Hello World!”的SpringBoot项目。千里之行始于足下,相信第一个java项目也是从“hello,world!”开始的。不要小瞧了这第一步,有多少人是在第一步遭受到了挫折从而放弃了。但是SpringBoot给提供的第一步启动实在是简单,和它的宗旨也正相符合。快速而简便的构建项目。
https://start.spring.io/这是SpringBoot提供的建立项目的网站,点击进去以后选择所需要的版本、语言、功能以后点击生成即可生成一个项目包,如果是想要启动一个简单的web项目,那么就在功能处输入web,那么会在建立项目的时候自动引入了springboot启动web包。然后用编译器打开项目以后你会发现SpringBoot已经将文件目录都创建好了。
可以清楚的看到SpringBoot的生成文件结构,其中FirstSpringBootApplication是和你的项目名是一致的,它相当于程序的入口处,而resource文件夹下的application文件是配置文件,例如想要配置启动的tomcat端口号都可以在此配置。build.gralde是由于我选择的是gradle所以生成的这个文件,此文件是可以将想要引用的jar包写在里面。gradle会自动的从网上或者本地下载相应的jar包。
2.2 项目启动
在项目的启动文件中加入这行代码,当然也可以自己建一个java文件。但是要加上@RestController注解。
@RequestMapping("/")
String home() {
return "Hello";
}
为什么是@RestController
而不是@Controller
呢,此时我们可以点击进@RestController
中可以看到它是由@Controller
和@ResponseBody
组成的注解。其中加不加@ResponseBody
是有区别的,如果加上的话那么就会将你的返回值作为数据返回,如果不加的话那么就会当做页面的名称。举个例子像上面的代码如果有@ResponseBody
的话那么就会返回给页面Hello字符串,如果是没有的话就会跳转到Hello.html或者Hello.jsp页面,具体是jsp还是html页面,得看SpringMvc的配置了,这里就不详细解释。然后直接运行FirstSpringBootApplication.java
里面main方法即可启动。打开了启动文件你会发现上面带了一个@SpringBootApplocation
注解。这个注解接下来我们再解释。然后在页面输入localhost:8080即可看见Hello。
2.3项目结构
通常来说,SpringBoot的启动类建议放在代码的根目录下的。因为@EnableAutoConfiguration
这个注解是基于你的启动类来扫描的,意思就是扫描启动类所在的文件夹以及以下的所有文件。如下所示,SpringBoot回去扫描domain、service和web包下的文件
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
3.@SpringBootApplocation注解详解
进入到@SpringBootApplocation
这个注解当中时,可以发现里面还有其他的注解
其中最重要的是@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan这三个注解。
3.1@EnableAutoConfiguration
这是一个类级别的注解,这个注解的作用是猜,为什么是猜呢。因为他会基于你的jar包依赖而猜测将会怎样的配置。例如spring-boot-starter-web你添加了这个jar包以后其中包含着Tomcat和SpringMVC,这个注解会猜测这个项目会是一个web项目,所以他就会自动的配置了Spring。
当然你要可以自己定制自己需要的配置,例如如果你想添加自己的数据源DateSource的话,那么自己写一个类,上面加上@Configure的注解,那么在项目启动的时候就会优先使用自己写的配置。如果想知道项目中有哪些是自动配置了,那么启动项目的时候用--debug启动那么在控制台中的日志中就会有显示。
如果发现有些类不想让他自动加载的话,那么就使用@EnableAutoConfiguration(exclude={类名})即可。
3.2 @ComponentScan
在Sping中你可以使用注解进行注入Bean,例如@Controller@Service等等,这些都是自动注入的。但是得设置扫描的包路径,直接@ComponentScan("org.example.web")这样既可,就是扫描org.example.web下的包。这个注解和xml中对应的配置是
<context:component-scan base-package="org.example.web"/>
3.3@SpringBootConfiguration
加上此注解的就表明了一个类提供SpringBoot应用。在之前的Spring的Test模块中,如果想要进行模块化的测试的话,或许会去寻找@ContextConfiguration进行加载一些资源文件,另外也可能需要写针对于Test模块的@Configuration,但是在SpringBoot中不用如此,因为他会有一个算法,会在模块化测试的时候回自动的寻找@SpringBootConfiguration注解。这样就不需要单独的配置测试模块的配置文件了,但是如果想定制化测试模块的配置文件话也可以,只要加上@TestConfiguration即可。
3.4其他注解
3.4.1@ImportResource
SpringBoot是不推荐使用xml的配置文件,他所想要的结果是所有的配置都是java类上面加上@Configuration配置。但是有的项目确实得需要xml配置文件,这时候就可以使用@ImportResource注解