跟我学springboot之(一)开篇

springboot与springCloud区别,各自的优缺点:

  1)SpringBoot专注于快速方便的开发单个个体微服务。

  SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。

  2)SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。

  3)SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
官网地址:https://spring.io/

Spring Boot 包含的特性如下:

  1. 创建可以独立运行的 Spring 应用。
  2. 直接嵌入 Tomcat 或 Jetty 服务器,不需要部署 WAR 文件。
  3. 提供推荐的基础 POM 文件来简化 Apache Maven 配置。
  4. 尽可能的根据项目依赖来自动配置 Spring 框架。
  5. 提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
  6. 没有代码生成,也没有 XML 配置文件。

原理:

  1. SpringBoot 在启动时会去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。

  2. 根据 spring.factories配置加载AutoConfigure类。

  3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。也可以使用@ImportAutoConfiguration({MyServiceAutoConfiguration.class}) 指定自动配置哪些类。

  4. 日常使用的Spring官方的Starter一般采取spring-boot-starter-{name} 的命名方式,如 spring-boot-starter-web 。而非官方的Starter,官方建议 artifactId 命名应遵循{name}-spring-boot-starter 的格式。 例如:door-spring-boot-starter 。

使用“默认”包

    当一个类不包含package声明时,它被认为是在“默认包”中。通常不鼓励使用“默认包”,应该避免使用。这可能会导致使用Spring的启动应用程序的特殊问题。 
会产生如下错误:

Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.

建议您遵循Java推荐的软件包命名约定,并使用反向域名(例如com.example.project)。

定位main应用类

通常建议你将main应用类放在位于其他类上面的根包(root package)中。通常使用 @EnableAutoConfiguration 注解main类,并且暗地里为某些项定义了一个基础“search package”。

使用根包允许你使用 @ComponentScan 注解而不需要定义一个 basePackage 属性。如果main类位于根包中,你也可以使 
用 @SpringBootApplication 注解。 
下面是一个典型的结构: 
com 
+- example 
+- myproject 
+- Application.java 

+- domain 
| +- Customer.java 
| +- CustomerRepository.java 

+- service 
| +- CustomerService.java 

+- web 
+- CustomerController.java

Application.java 文件将声明 main 方法,还有基本的 @Configuration 。

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

配置类

Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用 SpringApplication.run() ,我们通常建议你使用 @Configuration 类作为主要源。一般定义 main 方法的类也是主要 @Configuration 的一个很好候选。

导入其他配置类

你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。另外,你也可以使用 @ComponentScan 注解自动收集所有的Spring组件,包括 @Configuration 类。

导入XML配置

你可以使用附加的 @ImportResource 注解加载XML配置文件。

自动配置

Spring Boot自动配置(auto-configuration)尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在 HSQLDB ,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。

你可以通过将 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一个 @Configuration 类上来选择自动配置。 
注:你只需要添加一个 @EnableAutoConfiguration 注解。我们建议你将它添加到主 @Configuration 类上。

禁用特定的自动配置

如果发现应用了你不想要的特定自动配置类,你可以@EnableAutoConfiguration 注解的排除属性来禁用它们。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

Spring Beans和依赖注入

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

如果使用上面建议的结构组织代码(将应用类放到根包下),你可以添加 @ComponentScan 注解而不需要任何参数。你的所有 
应用程序组件( @Component , @Service , @Repository , @Controller 等)将被自动注册为Spring Beans。

使用@SpringBootApplication注解

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的 @SpringBootApplication 选择。


package com.example.myproject;
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开启了spring的组件扫描和自动配置功能。实际@SpringBootApplication将三个注解合在了一起: 
1. spring的@Configuration: 表明该类使用了spring基于Java的配置。 
2. Spring的@componentScan:启用组件扫描,这样组件可以被扫描到 
3. SpringBoot的@EnableAutoConfiguration:开启了springboot的自动配置

 

 SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。在很多情况下,你只需委托给 SpringApplication.run这个静态方法

自定义Banner

只需要在Spring Boot工程的/src/main/resources目录下创建一个banner.txt文或设置banner.location来指定相应的文件可以改变启动过程中打印的banner。如果这个文件有特殊的编码,你可以使用banner.encoding设置它(默认为UTF-8)。 
在banner.txt中可以使用如下的变量:

${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色。 
生成工具

如果让我们手工的来编辑这些字符画,显然是一件非常困难的差事。所以,我们可以借助下面这些工具,轻松地根据文字或图片来生成用于Banner输出的字符画。

  1. http://patorjk.com/software/taag
  2. http://www.network-science.de/ascii/
  3. http://www.degraeve.com/img2txt.php

 Spring Boot构建RESTful API

@RestController

Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代.

至此,我们通过引入web模块(没有做其他的任何配置),就可以轻松利用Spring MVC的功能,以非常简洁的代码完成了对User对象的RESTful API的创建以及单元测试的编写。

 案例地址:https://github.com/forezp/SpringBootLearning

posted on 2018-07-18 11:33  让代码飞  阅读(137)  评论(0)    收藏  举报

导航

一款免费在线思维导图工具推荐:https://www.processon.com/i/593e9a29e4b0898669edaf7f?full_name=python