最近开始学ssm框架才知道了框架的方便之处,然后有人告诉我springboot是ssm框架的升级版,所以准备学一下,在这里记录一下学习的历程和碰到的坑
使用idea可以快速创建springboot项目选择我们需要的模块;向导会联网创建Spring Boot项目;先看一下pom文件中为我们自动生成的依赖
父项目
ctrl点击spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
点进去之后可以看到这个父项目,他来真正管理Spring Boot应用里面的所有依赖版本;以后我们导入依赖默认是不需要写版本(没有在dependencies里面管理的依赖自然需要声明版本号)
启动器
对于spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
接下来看一下生成的代码
默认生成的Spring Boot项目;
- 主程序已经生成好了,我们只需要我们自己的逻辑
- resources文件夹中目录结构
- static:保存所有的静态资源; js css images;
- templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面【现在流行前后端分离,JSP正在逐渐被淘汰】);可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件;可以修改一些默认设置(例如tomcat的端口号);
主程序类,主入口类
在生成的项目中,会自动为我们生成主程序类
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
ctrl点击@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:标注在某个类上,表示这是一个Spring Boot的配置类
在这个注解的底层其实标注了@Configuration注解,并对其进行了增强
@Configuration注解标注在一个配置类上,来代替ssm框架中的配置文
件(在@Configuration注解底层标注了@Component注解,表明这个配置 类也是容器中的一个组件,交给容器管理) -
@EnableAutoConfiguration:开启自动配置功能
添加了这个注解,会告诉SpringBoot开启自动配置功能;这样自动配置才能生效,以前我们需要配置的东西,Spring Boot会帮我们自动配置在这个注解底层有@AutoConfigurationPackage注解 @AutoConfigurationPackage注解底层会调用 @Import(AutoConfigurationPackages.Registrar.class)给容器中导入一个组件;
导入的组件由AutoConfigurationPackages.Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器(如果此时把Controller层放到主配置类所在包之外,则会报404错误)
@EnableAutoConfiguration注解底层还有@Import(AutoConfigurationImportSelector.class)注解会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件
有了@EnableAutoConfiguration自动配置类,免去了我们手动编写配置注入功能组件等的工作
Controller
控制器则是和ssm中一样,需要我们自己编写
// @ResponseBody//这个类的所有方法返回的数据直接写给浏览器(如果对象是转为json数据)
// @Controller
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello world quick!";
}
}
- @ResponseBody:这个类的所有方法返回的数据直接写给浏览器(如果对象是转为json数据)
- @Controller:标注这是一个控制器
- @RestController:作用相当于@ResponseBody+@Controller
- @RequestMapping:用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于方法上,表示方法的请求路径,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
这样的话,springboot的第一个hello world代码就运行成功了
小结:相对于ssm框架来说,springboot采用了自动配置,省去了对配置文件的编写,减少了代码量和错误量,对于程序员可以说是非常友好了,由此可以看出框架的美还需要我们慢慢去体会