为什么要用springboot进行开发呢?

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

前言

学习了一段时间springboot,一般都可以在项目中使用springboot开发了。因为springboot的东西并不多,或者说,springboot根本就没有新东西。

好了,现在问一句,我们为什么要用springboot?

我听过的回答:

A:Spring Boot 最主要是不用 XML 配置,可以用 Java 来配置 bean,省去了许多配置文件
我又问:Spring 本身就可以用 Java 配置代替 XML 配置,和 Spring Boot 有什么关系呢?
A:。。。

B:Spring Boot 我们用来做 Spring Cloud 微服务。
我又问:微服务和 Spring Boot 有什么关系?不用 Spring Boot 行不行?
B:。。。

C:Spring Boot 可以打 jar 包部署,内部集成了Tomcat
这个确实是 Spring Boot 的特色,但是我还是觉得没有答到关键点上。
然后我继续问,如果不考虑打 jar 包部署呢?
C:。。。

显然,这些答案都没有回答到点子上。以我的理解,springboot是什么?它只是对spring Framework做了二次封装。以便简化开发,让程序员将更多的精力和时间放到业务上去。规避了繁琐的配置操作。而且还减少了遭遇bug的数量。说直白一点:自动配置

1、那么Springboot是怎么实现自动配置的

1.1 启动类

@SpringBootApplication
public class Application {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(Application.class, args);
    }
}

还是要从springboot的启动类说起。就这个类而言,最神秘的还是Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)。

1.2 @SpringBootApplication

这个注解之前没见过,可以说它是springboot自己的新注解,我们点进去看下。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
   
   
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
   
   
     ...      
}

可以看到,这是一个组合注解
虽然定义使用了多个Annotation进行了原信息标注,但实际上重要的只有三个Annotation

  • @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
  • @EnableAutoConfiguration
  • @ComponentScan

1.3 @Configuration

这里的@Configuration对我们来说不陌生,它就是JavaConfig形式的Spring Ioc容器的配置类使用的那个@Configuration,SpringBoot社区推荐使用基于JavaConfig的配置形式,所以,这里的启动类标注了@Configuration之后,本身其实也是一个IoC容器的配置类。

1.4 @ComponentScan

@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。

我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

注:所以SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。

1.5 @EnableAutoConfiguration

这厮才是springboot的核心!
大家是否还熟悉Spring框架提供的各种名字为@Enable开头的Annotation定义?比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和做事方式其实一脉相承,简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。

而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器,仅此而已!

@EnableAutoConfiguration作为一个复合Annotation,点进去,信息如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
   
   
    ...
}

这是springboot2.0的配置,如果你用的版本是1.5或以下的,是这样:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
   
   
    ...
}

当然,EnableAutoConfigurationImportSelector这个类也是继承了AutoConfigurationImportSelector类的,这个没关系,无所谓啦!

1.6 两个重要注解

  • @AutoConfigurationPackage:自动配置包
  • @Import: 导入自动配置的组件

1.7 AutoConfigurationPackage注解

你一步一步点进去,一直点到Registrar类中:

/**
     * {
   
   @link ImportBeanDefinitionRegistrar} to store the base package from the importing
     * configuration.
     */
    static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
   
   

        @Override
        public void registerBeanDefinitions(AnnotationMetadata metadata,
                BeanDefinitionRegistry registry) {
   
   
            register(registry, new PackageImport(metadata).getPackageName());
        }

        @Override
        public Set<Object> determineImports(AnnotationMetadata metadata) {
   
   
            return Collections.singleton(new PackageImport(metadata));
        }

它其实是注册了一个Bean的定义。
new PackageImport(metadata).getPackageName(),它其实返回了当前主程序类的 同级以及子级 的包组件。

1.8 Import(AutoConfigurationImportSelector.class)注解

在这里插入图片描述
可以从图中看出 AutoConfigurationImportSelector 继承了 DeferredImportSelector 继承了 ImportSelector
ImportSelector有一个方法为:selectImports

@Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
   
   
        if 
SpringBoot资料合集-04【Spring Boot与Web开发 1.SpringMVC快速使用 1.基于restful http接口 的CURD 2.调用rest http接口 3.通过postman调用 4.通过swagger调用 2.SpringMVC自动配置原理分析 3.定制SpringMvc的自动配置 1.通过WebMvcConfigurer进行扩展 2. Json 开发 3.国际化 4.统一异常处理 4.SpringBoot的嵌入式Servlet容器 1.嵌入式Servlet容器配置修改 2.注册servlet三大组件 3.切换其他嵌入式Servlet容器 4 阅读详情

相关推荐

SpringBoot 插件化开发详细总结

SpringBoot 插件化开发方案总结

congge 1万+

为什么要用Spring Boot

什么是Spring Boot?   Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Spring Boot默认配置了很多框架的使用方式,就像 Maven整合了所有的Jar包,Spring Boot整合了所有的框架。它的核心设计思想是∶约定优于配置,Spring Boot所有开发细节都是依据此思想进行实现的。 什么是约定优于配置?   约定优于配置(Con.

marcushbs的博客 4988

SpringBoot开发——SpringBoot项目开发入门

通过上面很简单的几个步骤就开发出一个项目,是不是SpringBoot开发很简单,我们只需关注业务逻辑方面的开发,其它与业务逻辑无关的事情都不需要我们操心,是不是很爽。

bjzhang75的博客 1235

Spring Boot】实战Spring Boot(一)——Spring Boot是什么?什么时候用?

一、前言      今年比较火的可以说是Spring Boot了。      用了Spring Boot,就不用配置Spring的xml配置文件啦~~~~。从此告别applicationContext*.xml。      Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它, 你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Sprin

哈士奇 1万+

为什么要用SpringBoot

spring boot来简化spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用 Spring Boot 优点非常多,如: 一、独立运行 Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。 二、简化配置 spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。

siyuanwai的博客 1655

SpringBoot开发——初步了解SpringBoot

Spring Boot是一个构建在Spring框架顶部的项目。它提供了一种简便,快捷的方式来设置,配置和运行基于Web的简单应用程序。它是一个Spring模块,提供了 RAD(快速应用程序开发)功能。它用于创建独立的基于Spring的应用程序,因为它需要最少的Spring配置,因此可以运行。简而言之,Spring BootSpring Framework 和 嵌入式服务器的组合。在Spring Boot不需要XML配置(部署描述符)。

m0_74825135的博客 839

为什么要用springboot开发

在没有spring boot的年代,搭建一个java项目非常麻烦,一大推配置文件需要搭建,而所用到的开源组件的依赖包又可能互相冲突,因此,在没有spring boot的年代,搭建一个完整的项目非常麻烦,往往搭建一个项目都要花两天的时间。 在springboot出现后,这种情况改变了,不单是搭建项目的时间节省了,搭建开发环境的时间也节省了,以前把java代码跑起来需要借助tomcat能中间件,而springboot可以为我们内置了tomcat的中间件,我们把java代码跑起来,永远不再需要我们手工.

yuxinaibiancheng的博客 2331

springboot tomcat配置_为什么很多Spring Boot开发者放弃了Tomcat

前言在 Spring Boot 框架中,我们使用最多的是 Tomcat,这是 Spring Boot 默认的容器技术,而且是内嵌式的 Tomcat。同时,Spring Boot 也支持 Undertow 容器,我们可以很方便的用 Undertow 替换 Tomcat,而 Undertow 的性能和内存使用方面都优于Tomcat,那我们如何使用 Undertow 技术呢?本文将为大家细细讲解。Spr...

weixin_39917485的博客 327

SpringBoot简介:用Spring Boot颠覆Java应用开发

Java开发概述: 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这也是许多公司采用Java作为主流的语言进行服务器端开发的原因,也是为什么Java一直保持着非常活跃的用户群。然而这个生态系统纷繁复杂,一个非常简单的Java Web应用...

qq_40714770的博客 547

SpringBoot与传统Spring对比:为什么开发者更爱Boot

Java开发领域,Spring框架一直是企业级应用开发的首选。从传统的SpringSpring Boot,它们在不同的阶段为开发者提供了强大的支持。传统Spring框架以其丰富的功能和强大的扩展性,帮助开发者构建复杂的企业级应用。而Spring Boot的出现,更是为开发者带来了全新的开发体验。本文将深入对比Spring Boot与传统Spring,探讨为什么开发者更倾向于使用Spring Boot

梵心白莲的博客 751

为什么越来越多的开发者选择使用Spring Boot

一、Web应用开发背景 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架、库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这也是许多公司采用Java作为主流的语言进行服务器端开发的原因,也是为什么Java一直保持着非常活跃的用户群体的原因。 最受Java开发者喜好的框架当属SpringSpring也成为了在Java EE开发中真正意义上的标准,但是随着新技术的发展,脚本语言大行其道的时代(

sion127的博客 1539

SpringBoot开发Spring Boot入门

从前面的学习可知,Spring框架非常优秀,但问题在于"配置过多",造成开发效率低、部署流程复杂以及集成难度大等问题。为解决上述问题,Spring Boot应运而生。

不服输的小乌龟 3283

为什么都在用springbootspringboot开发步骤

在学习Spring Boot时,我们需要了解Maven或Gradle的使用、Spring框架的原理和基础知识,以及一些相关的中间件和组件,这样才能够更好地利用Spring Boot进行快速开发。在这个类中,我们可以定义我们所需要的各种组件、路由等。1.自动配置:Spring Boot采用自动配置的方式,大量减少了开发者对项目的配置工作,同时也降低了因为配置错误而引起的问题。在Spring Boot中,Controller类是负责接收和处理所有的Web请求,定义我们的路由和相应的逻辑。

wustrive_2008的博客 528

springboot与敏捷开发

1springboot的起源 2springboot优缺点 3利用springboot快速搭建web项目 4浅析springboot文件结构及配置文件 5关于敏捷的一些看法 目前流行的开发方式: maven+svn/GIT+springmvc+mybaties/hibernate/springjdbc 由application.xml来配置整合所有的框架 s

itzhuimeng的专栏 2885

SpringBoot快速开发

1.SpringBoot简介 什么是springbootspring公司提供的,用来开发JavaEE的框架 为何用springboot?(spring已经很优秀了,为何需要springboot呢?因为spring项目写代码很爽,但是有麻烦的地方,第一是需要配置的maven依赖太多,第二是依赖的jar包版本总是冲突,第三是运行使用的配置文件太多,添加一个框架或者技术,就多一个配置文件,用sprin...

ItBeat的博客 504

SpringBoot基于Web开发

使用Spring Boot开发Web应用是一个高效且流行的选择,因为它极大地简化了Spring应用的初始搭建以及开发过程。

2301_78122337的博客 672
上一篇: Spring事务的传播级别——包你一文通
下一篇: Spring Boot 最核心的27个注解,你了解多少?
胖天才小朱(怀玉)
博客等级 码龄6年 329粉丝 · 80原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖天才小朱(怀玉)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值