第一篇构建一个Springboot 工程
Springboot 是为了简化Spring 应用的创建、运行、调试、部署 等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的xml配置 我们只需要遵守规范 引入相关的依赖就可以轻易的搭建出一个WEB工程
在没有Springboot之前 搭建一个普通SSM项目需要半个小时或者更久 有了Springboot 而一切去繁为简
设计的目标
java项目开发复杂度极其高
java 项目的维护非常困难
为所有使用Spring框架的开发者提供一个更加简单 快速入门的体验 让大量时间充分利用到业务上去
提供一些常见的功能 如 WEB容器 监控 健康 安全等功能
干掉XML 遵守规范 开箱即用
Spring 推出微服务实现的两个重要开发框架 Springboot /SpringCloud
前提
Springboot 之所以慢慢可以火遍全世界 是因为在springboot 中使用的大量注解还是之前Spring所提供的注解
那么这一点让所有开发者几乎可以零适应进行完整过度
SpringBoot 为我们提供了一系列的依赖包,所以需要构建工具的支持:Maven 或 Gradle。由于本人更习惯使用Maven
所以 后续案例都是基于Maven 与 IntelliJ IDEA,同时这里是基于最新的SpringBoot2编写
创建项目
初次接触,我们先来看看如何创建一个Spring Boot项目,这里以IntelliJ IDEA为例,其他的IDE工具小伙伴们自行搜索创建方式。创建完项目后,各位小伙伴请认真、细心的对比下与传统的WEB工程有何区别(如:目录结构)。
点击File -> Project
如果用过 Eclipse/IDEA 等工具的,对创建项目肯定不会陌生,但为了照顾第一次使用的我贴上了图文
选择Spring Initializr
到这一步选择的时候,如图中选项的是Spring Initializr(官方的构建插件,需要联网),第二个是自己选择Maven构建。
第三个是自己选择 Gradle 构建 ,第四个自己去https://start.spring.io 网站里面下载 。这里直接选用插件构造项目
点击next 出现 填写项目基本信息
-
Group: 组织ID,一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为 org、com、cn等等,
-
其中 org为非营利组织,com为商业组织。如阿里、淘宝(com.alibaba/com.tenxun/com.baidu)
-
Artifact: 唯一标识符,一般是项目名称
选择包
Spring Initializr 为我们提供了很多的选项 不同的选项有不同的作用 在初期我们只需要依赖Web ---->Web 就可以了
选择好了依赖包之后点击Next----Finish
目录结构
- src
-main
-java
-package
-SpringbootApplication #主函数,启动类,运行它如果运行了 Tomcat、Jetty、Undertow 等容器
-resouces
- statics #存放静态资源 js/css/images 等
- templates #存放 html 模板文件
- application.yml #主要的配置文件,SpringBoot启动时候会自动加载application.yml/application.properties
-test #测试文件存放目录
# pom.xml 文件是Maven构建的基础,里面包含了我们所依赖JAR和Plugin的信息
- pom
pom.xml 依赖
因为使用Spring Initializr 插件 所以如下的配置都不需要我们自己去写啦 需要注意的是版本的选择 稳定版本BUG少
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hema</groupId>
<artifactId>demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo1</name>
<description>Springboot 之旅</description>
<!--版本采用的是最新的 2.0.1.RELEASE TODO 开发中请记得版本一定要选择 RELEASE 哦 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--默认就内嵌tomcat 服务器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 测试包,当我们使用 mvn package 的时候该包并不会被打入,因为它的生命周期只在 test 之内-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 编译插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
主函数入口
注意事项: 一个项目中切记不要出现多个 main 函数,否在在打包的时候 spring-boot-maven-plugin 将找不到主函数(主动指定打包主函数入口除外…)
package com.hema.demo1;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Arrays;
/*
在之前项目有些是使用这个注解 开启自动配置
@EnableAutoConfiguration
使用@EnableAutoConfiguration注解时,
必须得配置@ComponentScan(basePackages = "com.example.web, com.example.service"),
才能扫描service及web下 的类,并进行调用
但是现在官方推荐的使用这个注解
@SpringBootApplication
使用@SpringbootApplication注解 ,
可以解决根类或者配置类(我自己的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication相当于
@Configuration, @EnableAutoConfiguration和 @ComponentScan,并具有他们的默认属性值
*
* */
@SpringBootApplication
@Controller
public class Demo1Application {
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
}
@GetMapping("/home")
@ResponseBody
public String home(){
return "第一个Springboot 代码";
}
/****
* 来看看 SpringBoot 默认为我们提供的 Bean名称和多少个Bean
* @param ctx
* @return
*/
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx){
return args -> {
System.out.println("来看看 SpringBoot 默认为我们提供的 Bean:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
System.out.println("SpringBoot 默认为我们提供"+beanNames.length+"个的Bean");
Arrays.stream(beanNames).forEach(System.out::println);
};
}
}
修改Springboot默认端口 默认端口是8080
我这里使用的是传统配置 application.properties 也可以使用 application.yml
附上yml配置方式
@RestController = @Controller+@ResponseBody 通过源码可以看到结果
在浏览器上输入 http://localhost/demo:8989
出现这个 说明springboot 第一个demo 成功跑起来了 喜欢的麻烦 githua 上点个小星星
githua 代码如下 https://github.com/zhouwei520/Springboot