从零开始学Spring Boot(1)之第一个SpringBoot应用

目录:

前言:

目前打算写一系列关于SpringBoot的教程,观望网上大多数视频以及教程都是单纯教大家如何写一个SpringBoot程序(比如最简单的Hello World程序)出来,而没有介绍到SpringBoot一些注解的作用以及原理到底是怎样的,所以决定结合官方文档以及《Spring Boot 实战》这本书写一系列教程帮大家入门SpringBoot。笔主使用的 开发工具是idea,推荐大家使用idea,当然你也可以使用Eclipse等开发工具。下面讲述的时候,我都以idea为视角讲解程序编写过程。

概要

本节将先从Spring谈起再到SpringBoot,然后通过一个实际的例子带大家感受Spring Boot的强大。

一 SpringBoot介绍

1.1 先从Spring谈起

我们知道Spring是重量级企业开发框架 Enterprise JavaBean(EJB) 的替代平,Spring为企业级Java开发提供了一种相对简单的方法,通过 依赖注入面向切面编程 ,用简单的 Java对象(Plain Old Java Object,POJO) 实现了EJB的功能

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的(需要大量XML配置) 。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

尽管如此,我们依旧没能逃脱配置的魔爪。开启某些Spring特性时,比如事务管理和Spring MVC,还是需要用XML或Java进行显式配置。启用第三方库时也需要显式配置,比如基于Thymeleaf的Web视图。配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显式配置。组件扫描减少了配置量,Java配置让它看上去简洁不少,但Spring还是需要不少配置。

光配置这些XML文件都够我们头疼的了,占用了我们大部分时间和精力。除此之外,相关库的依赖非常让人头疼,不同库之间的版本冲突也非常常见。

不过,好消息是:Spring Boot让这一切成为了过去。

1.2 再来谈谈Spring Boot

最好直白的介绍莫过于官方的介绍:

扫描二维码关注公众号,回复: 1528872 查看本文章

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”(可能是run ‘Application’或java -jar 或 tomcat 或 maven插件run 或 shell脚本)便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)

关于Spring Boot的一些误解:

  • Spring Boot不是应用服务器: Spring Boot可以把Web应用程序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),以此实现这一功能。但这是内嵌的Servlet容器提供的功能,不是Spring Boot实现的
  • Spring Boot也没有实现诸如JPA或JMS(Java Message Service,Java消息服务)之类的企业级Java规范。 它的确支持不少企业级Java规范,但是要在Spring里自动配置支持那些特性的Bean。例如,Spring Boot没有实现JPA,不过它自动配置了某个JPA实现(比如Hibernate)的Bean,以此支持JPA
  • Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。

简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。

SpringBoot的特点:

  • 创建独立的Spring应用程序
  • 直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
  • 简化的Maven配置
  • 尽可能自动配置Spring
  • 提供生产就绪功能,如指标,运行状况检查和外部配置
  • 绝对不会生成代码,并且不需要XML配置

二 第一个HelloWorld项目

2.1 项目创建

1.打开IDEA,创建新项目,选择Spring Initializr

项目创建1

2.自己命名groupId以及artifactId

项目创建2

3.勾选web选项:

4. 点击finish即可完成创建

创建好的项目结构:

项目结构

另外,spingboot建议的目录结果如下:

root package结构:com.example.myproject

com
  +- example
    +- myproject
      +- Application.java
      |
      +- domain
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service
      |  +- CustomerService.java
      |
      +- controller
      |  +- CustomerController.java
      |

1、Application.java 建议放到跟目录下面,主要用于做一些框架配置

2、domain目录主要用于实体(Entity)与数据访问层(Repository)

3、service 层主要是业务类代码

4、controller 负责页面访问控制

采用默认配置可以省去很多配置,当然也可以根据自己的喜好来进行更改。

如果你没有idea的话,你也可以通过https://start.spring.io/ 这个网站来创建。

2.2 添加相关Maven依赖(利用上面的步骤创建完成后自动生成)

<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

使用上面的方式创建Spring Boot项目之后pom.xml文件中默认有两个模块:

  • spring-boot-starter:核心模块,包括自动配置支持、日志和YAML;

  • spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito。

2.3 相关代码编写

项目结构:

└── src
    └── main
        └── java
            └── FirstSpringBootApp

src/main/java/FirstSpringBootApp/HelloWorld .java

package FirstSpringBootApp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller
@EnableAutoConfiguration

public class HelloWorld {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    @RequestMapping("/hello")
    @ResponseBody
    String home1() {
        return "Hello World! Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(HelloWorld.class, args);
    }
}

2.4 补充:

我们可以把 @Controller 注解更换成 @RestController ,这样在每一个方法上面就不需要再加 @ResponseBody 注解了。

src/main/java/FirstSpringBootApp/HelloWorld2 .java

package FirstSpringBootApp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class HelloWorld2 {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    @RequestMapping("/hello")
    String home1() {
        return "Hello World! Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(HelloWorld.class, args);
    }
}

上述代码和前面编写的代码运行后具有同样的效果。

@RestController:

一种方便的注释,集成了@Controller和@ResponseBody注解。也就是说加上RestController 表示修饰该Controller所有的方法返回JSON格式,直接可以编写
Restful接口。

@EnableAutoConfiguration

作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置

这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

SpringApplication.run(HelloController.class, args)

标识为启动类

2.5 运行测试

右键类名后点击Run即可。
运行方法1
`
访问 http://localhost:8080/
http://localhost:8080/

访问 http://localhost:8080/hello
http://localhost:8080/hello

猜你喜欢

转载自blog.csdn.net/qq_34337272/article/details/79563606