关于Spring Boot
Spring一直饱受争议的就是其大量的XML文件配置和依赖管理,不仅增加了使用难度也增加了维护时的损耗度。这让Spring团队陷入了思考,Spring Boot应运而生,Spring Boot不是Spring的替代品或者改良品,它出现的意义是为了优化Spring的开发体验。它依靠“约定优先配置”的思想来简化Spring繁杂的XML文件,这样我们在开发的时候,就不需要在各种配置上耗费精力了,因为Spring Boot已经为我们默认建立好了所有的配置,如果你想修改你依然可以建立配置文件进行修改,但如果你不想修改,无需其他操作你就可以直接写业务逻辑了。
Spring Boot的Hello World
基于传统的SpringMVC项目你需要创建至少三个配置文件:项目的web.xml文件、SpringMVC的上下文配置文件dispatcher-servlet.xml和Spring的上下文配置文件applicationContext.xml。而如果你使用Spring Boot构建项目,这些步骤都可以省去。
以Maven为例:
1.首先你需要在pom.xml文件中加入依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.创建ApplicationMain类
@SpringBootApplication
//这个注解为了阻止spring boot自动注入datasource bean,spring boot在启动的时候会默认加载DataSourceAutoConfiguration类,这个类使用了@Configuration注解向spring boot注入了datasource bean,因为工程中并没有datasource的相关配置信息,所以就会报错。
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class, args);
}
}
@SpringBootApplication注解是一种简化的注解方式,为了解决main类头上注解过多的问题。实质上它的作用等于以下三个注解的默认值:@Configuration,@EnableAutoConfiguration,@ComponentScan。我们下面简单的介绍一下这三个注解的作用。
@Configuration注解一般和@Bean注解一起使用,也是为了简化XML文件的一种方式,将一个XML文件转化为一个Java类(但肯定没有“约定优于配置”理念方便),是为了告诉Spring这是一个配置类。
@EnableAutoConfiguration:自动配置Spring的上下文。
@ComponentScan:会扫描指定包底下带有@Component标注的类装配成bean,包括@Component下得子注解,比如@Controller、@Service、@Repository。因为是默认值,所以ApplicationMain 类必须要建立在项目的root package下,比如这样:
3.创建HelloController
@Controller
public class HelloController {
@RequestMapping("/")
public String hello(){
return "hello";
}
}
@RequestMapping("/helloWorld")
@ResponseBody
public String helloWorld(){
return "Hello World";
}
4.创建视图
我们需要在resources目录底下的application.properties文件中加入配置:
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
然后在resources/templates下创建hello.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
Hello World
</body>
</html>
5.运行main函数然后访问http://localhost:8080/