《从0到1开始学SpringBoot》 初识springboot

it2022-05-05  188

  Spring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序, 大多数Spring Boot应用程序只需要很少的Spring配置。

我们的主要目标是:

为所有Spring开发提供一个更快,更广泛的入门体验。立即开始开发。提供大型项目(如嵌入式服务器,安全性,指标,运行状况检查和外部配置)通用的一系列非功能性功能。绝对不会生成代码,并且不需要XML配置。

  Spring Boot 2.0.0.RELEASE需要Java 8或9以及 Spring Framework 5.0.4.RELEASE或更高版本。为Maven 3.2+和Gradle 4提供了明确的构建支持。

  下面开始介绍如何开发一个简单的“Hello World!”Web应用程序,该应用程序重点介绍Spring Boot的一些主要功能。我们使用Maven来构建这个项目,因为大多数IDE都支持它。

1,创建POM

以下清单显示了一个典型的pom.xml文件:

<?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> com.example </ groupId>     <artifactId> myproject </ artifactId>     <version> 0.0.1-SNAPSHOT </ version>     <! - 从Spring Boot继承默认值 - - >     <parent>         <groupId> org.springframework.boot </ groupId>         <artifactId> spring-boot-starter-parent </ artifactId>         <version> 2.0.0.RELEASE </ version>     </ parent>     <! - 添加Web应用程序的典型依赖关系 - >     <dependencies>         <dependency>             <groupId> org.springframework.boot </ groupId>             <artifactId> spring-boot-starter-web </ artifactId>         </ dependency>     </ dependencies>     <! - Package as a executable jar - >     <build>         <plugins>             <plugin>                 <groupId> org.springframework.boot </ groupId>                 <artifactId>spring-boot-maven-plugin </ artifactId>             </ plugin>         </ plugins>     </ build> </ project>

 

2,编写代码

  为了完成我们的应用程序,我们需要创建一个Java文件。默认情况下,Maven编译源代码src/main/java,因此您需要创建该文件夹结构,然后添加一个名为src/main/java/Example.java包含以下代码的文件:

import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.web.bind.annotation.*; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } }

1.1.1 @RestController和@RequestMapping注解

我们Example类的第一个注释是@RestController。这被称为 stereotype annotation。它为阅读代码的人提供了线索,对于Spring来说,这个类扮演着特定的角色。在这种情况下,我们的类是一个Web @Controller,所以Spring在处理传入的Web请求时会考虑这个类。

该@RequestMapping注释提供“路由”的信息。它告诉Spring,任何带有/路径的HTTP请求都应映射到该home方法。该 @RestController注释告诉Spring将结果字符串直接呈现给调用者。

在@RestController与@RequestMapping注解是Spring MVC的注解。(它们并不特定于Spring Boot。)有关更多详细信息,请参阅Spring参考手册中的MVC部分。

1.1.2 @EnableAutoConfiguration注解

第二个级别注释是@EnableAutoConfiguration。这个注解告诉Spring Boot根据你添加的jar依赖来“猜测”你想要如何配置Spring。自从spring-boot-starter-web添加了Tomcat和Spring MVC之后,自动配置假定您正在开发一个Web应用程序并据此设置Spring。

1.1.3“main”方法

我们应用程序的最后一部分是该main方法。这只是一个遵循Java约定的应用程序入口点的标准方法。我们的主要方法SpringApplication通过调用委托给Spring Boot的类run。 SpringApplication引导我们的应用程序,从Spring开始,然后启动自动配置的Tomcat Web服务器。我们需要Example.class将该run方法的参数作为参数传递,以确定SpringApplication哪些是主要的Spring组件。还传递了args数组以传递命令行参数。

1.1.4 创建可执行的jar

让我们完成我们的例子,创建一个完全自包含的可执行jar文件,我们可以在生产环境中运行。 可执行的jar(有时称为“fat jars”)是包含编译的类以及代码运行所需要的所有jar包依赖的归档(archives)。

可执行jar和Java

Java不提供任何标准的方法来加载嵌套的jar文件(即本身包含在jar中的jar文件)。 如果您正在寻找可以发布自包含的应用程序,这可能是有问题的。 为了解决这个问题,许多开发人员使用“uber” jars。 一个uber jar简单地将所有类、jar包进行档案。 这种方法的问题是,很难看到您在应用程序中实际使用哪些库。 如果在多个jar中使用相同的文件名(但具有不同的内容),也可能会出现问题。 Spring Boot采用一个不同的方法这样可以直接对jar进行嵌套。

要创建可执行的jar,我们需要将spring-boot-maven-plugin添加到我们的pom.xml中。 在 dependencies标签 下方插入以下行:

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

2,配置类的使用

2.1. 配置类

Spring Boot提倡基于Java的配置。尽管你可以使用XML源调用SpringApplication.run(),不过还是建议你使用@Configuration类作为主要配置源。通常定义了main方法的类也是使用@Configuration注解的一个很好的替补。

注:虽然网络上有很多使用XML配置的Spring示例,但你应该尽可能的使用基于Java的配置,搜索查看enable*注解就是一个好的开端。

2.2导入其他配置类

你不需要把所有的@Configuration东西都放到一个班上。该@Import注释可用于导入其他配置类。或者,您可以使用 @ComponentScan自动获取所有Spring组件,包括@Configuration类。

2.3导入XML配置

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。简单起见,我们经常使用@ComponentScan注解搜索beans,并结合@Autowired构造器注入。

如果遵循以上的建议组织代码结构(将应用的main类放到包的最上层,即root package),那么你就可以添加@ComponentScan注解而不需要任何参数,所有应用组件(@Component, @Service, @Repository, @Controller等)都会自动注册成Spring Beans。

下面是一个@Service Bean的示例,它使用构建器注入获取一个需要的RiskAssessor bean。

如果你绝对必须使用基于XML的配置,我们建议你仍然从一个@Configuration类开始。然后您可以使用@ImportResource注释来加载XML配置文件。

3,Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。简单起见,我们经常使用@ComponentScan注解搜索beans,并结合@Autowired构造器注入。

如果遵循以上的建议组织代码结构(将应用的main类放到包的最上层,即root package),那么你就可以添加@ComponentScan注解而不需要任何参数,所有应用组件(@Component, @Service, @Repository, @Controller等)都会自动注册成Spring Beans。

下面是一个@Service Bean的示例,它使用构建器注入获取一个需要的RiskAssessor bean。

package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; @Autowired public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }

如果一个bean有一个构造函数,则可以省略@Autowired,如以下示例所示:

@Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }

注 注意使用构建器注入允许riskAssessor字段被标记为final,这意味着riskAssessor后续是不能改变的。

3,使用@SpringBootApplication注释

很多Spring Boot开发者经常使用@Configuration,@EnableAutoConfiguration,@ComponentScan注解他们的main类,由于这些注解如此频繁地一块使用(特别是遵循以上最佳实践的时候),Spring Boot就提供了一个方便的@SpringBootApplication注解作为代替。

@SpringBootApplication注解等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan:

package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

注 @SpringBootApplication注解也提供了用于自定义@EnableAutoConfiguration和@ComponentScan属性的别名(aliases)。这些功能都不是强制性的,您可以选择使用它启用的任何功能替换此单个注释。例如,您可能不想在应用程序中使用组件扫描:

package com.example.myapplication; import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @EnableAutoConfiguration @Import({ MyConfig.class, MyAnotherConfig.class }) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

 


最新回复(0)