1、简介
(1)出现的背景
- javaee的开发需要笨重繁多的配置,开发效率低下,部署流畅复杂,第三方技术集成度大。springboot能够简化spring的开发,约定大于配置
- 整合了spring技术栈
- javaee开发的一站式解决方案
(2)优点
- 快速创建独立运行的spring项目以及主流框架集成
- 使用嵌入式的servlet容器,应用无需打成war包
- struts自动依赖于版本控制
- 大量的自动配置,简化开发,也可以修改默认值
- 无需配置xml,无代码生成,开箱即可
- 准生产环境的运行时应用监控
- 与云计算的天然集成
(3)微服务
单体应用:
- 开发部署简单,不牵涉到多个应用的互联。但是只要修改一处就要重新部署,还有日益增长的软件需求,使得应用过大。
微服务:
- 与单体用用的单体复制部署到多个服务器来满足用户需求不同,微服务是把每一个功能元素放进一个独立的服务器中,是功能模块级别的复制,而不是整个应用。
- 每一个功能元素都是一个可独立替换和独立升级的软件单元
- 存在部署和运维较复杂的缺点
- springboot快速构建一个应用、springcloud用于模块之间的互调、springcloud Data Flow分布式之间的流式计算批处理
2、新建SpringBoot项目
(1)新建一个maven的web工程
(2)在maven的配置文件中导入springboot的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
(3)编写主程序并启动SpringBoot应用:
//添加注解,标注一个主程序类,说明这是一个springboot应用
@SpringBootApplication(scanBasePackages = "pers")
public class HelloWorld {
public static void main(String[] args) {
//启动spring应用
SpringApplication.run(HelloWorld.class,args);
}
}
(4)书写controller层代码
@Controller
public class HelloController {
@ResponseBody//
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
@ResponseBody:这个类的所有方法返回的数据直接写给浏览器,如果是对象转换为json类型的数据
(5)运行主程序
可以看出,在springboot的项目中,不需要配置视图解析器、前端控制器,甚至连tomcat都不需要配置
3、将springboot项目打成jar包
(1)导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
(2)运行生命周期函数
要确保maven的配置文件中的配置是生成jar包:
生成jar包成功:
(3)运行生成的jar包:在cmd中用java -jar命令运行
4、依赖
(1)父项目
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
</dependency>
来管理springboot应用里面的所有依赖,是springboot的版本仲裁中心,例如:导入它管理范围内的依赖是不需要写版本号的,因为里面蕴含所有的版本信息
(2)spring-boot-starter-web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
spring-boot-starter:springboot的场景启动器,帮我们导入了web模块正常运行所依赖的组件。根据不同的功能,可以选择springboot的不同启动器。因为springboot将所有的功能都抽取了出来,做成一个个的启动器,只需要在项目里面引入这些启动器,相关场景的所有依赖都会导入进来
5、主程序类
(1)@SpringBootApplication注解
@SpringBootApplication(scanBasePackages = "pers")
public class HelloWorld {
public static void main(String[] args) {
//启动spring应用
SpringApplication.run(HelloWorld.class,args);
}
}
@SpringBootApplication标注在某一个类上面后就说明这个类是springboot的主配置类,可以运行这个类的main方法来启动springboot应用
(2)查看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}
)}
)
@SpringBootConfiguration:springboot的配置类,表示这是一个springboot的配置类
@EnableAutoConfiguration:开启自动配置功能。例如:包扫描等。在配置@SpringBootApplication注解的时候,默认情况是只扫描主类的包,因此在扫描其他包的时候需要添加参数
6、使用spring initializer快速创建Spring Boot项目
(1)新建项目
(2)输入相关参数
(3)选择需要的功能(这里只选择web功能)
(4)创建项目成功
能够正常访问:
(5)特点
主程序已经生成,只需要添加业务逻辑即可
目录结构: