SpringBoot中几个常见的几个问题

一、SpringBoot、SpringMVC和Spring有什么区别

spring是一个IOC容器,用来管理bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制,弥补OOP的代码重复机制,更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等。

springMVC是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求。然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术生成视图展示给前端。

springboot是spring提供的一个快速开发工具,让程序员能更方便、更快速的开发spring+SpringMVC应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用。

二、SpringBoot是如何启动Tomcat的

1、首先,SpringBoot在启动时会先创建一个Spring容器
2、在创建spring容器的的过程中,会利用@ConditionOnClass技术来判断当前classpath中是否存在tomcat依赖,如果存在则会生成一个启动的tomcat的Bean
3、spring容器创建完之后,就会获取启动Tomcat的bean,并创建tomcat对象,并绑定端口等,然后启动tomcat

三、SpringBoot中常用的注解

1、@SpringBootApplication:标识了这是一个SpringBoot工程,它实际上是另外三个注解的组合。即
@SpringBootConfiguration:这个注解实际上就是一个@Configuration,表示启动类是一个配置类
@EnableAutoConfiguration:向Spring容器中国导入一个Selector,用来加载ClassPath下的SpringFactories在所定义的自动配置类,将这些自动加载为配置Bean
@ComponentScan:标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前目录

2、@Bean:用来定义Bean,类似于XML中的标签,在spring启动时,会对家了@Bean注解的方法进行解析,将方法的名字作为BeanName,并通过执行方法得到bean对象

3、@Controller
@Service
@ResponseBody
@Autowired

四、SpringBoot中配置文件的加载顺序

优先级从高到低,高优先级的配置会覆盖低优先级的配置,所有配置会形成互补配置。
1、命令行参数,素有的配置都可以在命令航上面进行指定
2、Java系统属性(System.getProperties)
3、操作系统环境变量
4、jar包外部的application(profile).properties或application.yml(带spring.profile)配置文件
5、jar包内部的application(profile).properties或application.yml(带spring.profile)配置文件,再来加载不带profile
6、jar包外部的applicatio.properties或application.yml(不带spring.profile)配置文件
7、jar包内部的applicatio.properties或application.yml(不带spring.profile)配置文件
8、@Configuation注解类上面的PropertlySource

五、SpringBoot自动配置原理

在这里插入图片描述
@AutoConguration注解使用了@Import来导入了AutoConfigurationPackageRegistrar.class(是一个内部类),通过这个内部类实际上是手动注册了一个bean,这个bean是用来保存扫描路径的。

通过@Import导入了类AutoConfigurationImportSelector.class,类里面有个方法slectImpots,会返回一个字符串数组,存放的是类的全路径。spring读到这些类的全路径之后,会通过反射的方式将类放入Spring容器中,最终都会变成bean。
返回的字符串数组中的数据是哪来的呢?这些字符串是放在META-INF/spring.factories文件中。该文件是key-value的形式,在自动装配的过程中要是读取key=EnableAutoConfiguration 的值,会有很多字符串,这些字符串都是类的全路径,SpringFactoriesLoader.loadFactoryNames(Spring提供的一个API)配合Import注解,利用反射,将这些类全部加载到Spring容器中。

例如MyBatis,正常拖入mybatis包,还需要在xml文件中配置mybatis相关的一些bean标签。如果使用自动装配的话,mybatis只需提供一个META-INF/spring.factories文件,将bean的全路径去全部放进去,就会自动把这些需要的bean加载进去。

简单归纳下:
(1)、@Import + @Configuration + Spring spi
(2)、自动配置类由各个start提供,使用@Configuration + @Bean定义配置类,放到META-INF/spring.factories下
(3)、使用Spring spi扫描META-INF/spring.factories下的配置类
(4)、使用@Import导入自动配置类

六、如何理解SpringBoot的starter

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值