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

  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);
	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值