从最初的单体架构,到现在的微服务架构,Spring Boot 都发挥着超大的作用,它简洁快速开发的魅力,值得推广到公司的任何项目中。目前,Spring Boot 拥有超棒的特性和它集成许多的优秀技术!
SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。

SpringBoot 是简化 Spring 应用开发的一个框架。他整合了 Spring 的技术栈,提供各种标准化的默认配置。使得我们可以快速开发 Spring 项目,免掉 xml 配置的麻烦。降低 Spring 项目的成本。

一、SpringBoot 外部配置文件加载顺序

这个挺多的,我们就几个重要的。

  • 高优先级的会覆盖低优先级的。

  • 命令行上的参数配置是优先级最高的。

  • jar 包外的带 profile 的配置文件。

  • jar 包内的带 profile 的配置文件。

  • jar 包外的不带 profile 的配置文件。

  • jar 包内的不带 profile 的配置文件。

二、SpringBoot 如何扩展 SpringMVC 的配置

通过建立自己的类继承 WebMvcConfigurerAdapter ,在类上面打上注解 @Configuration 。然后重写里面的方法即可。容器中的所有的 WebMvcConfigurer 会一起起作用。

在这里插入图片描述
如果我们不想使用 mvc 的自动配置,全部使用自己的。可以在配置类上增加注解 @EnableWebMvc 。这个注解可以导入一个 webmvcconfigurationsupport 的类。然后 mvc 的自动配置类上的注解有这么一句话,有一个条件注解,当没有上面那个类的时候,才生效。

笔者整理了最新各路知识点合集包含有:JVM、MySQL、MyBatis、Dubbo、Liunx、TomCat等多种知识点,如果各位有需要的话欢迎加入我们的讨论群1149778920来一起交流学习领取资料 暗号:qf

在这里插入图片描述

三、Spring控制反转(IOC)

Spring IoC 的实现机制

Spring 中的 IoC 的实现原理就是工厂模式加反射机制。

interface Fruit {
   public abstract void eat();
 }
 
class Apple implements Fruit {
    public void eat(){
        System.out.println("Apple");
    }
}
 
class Orange implements Fruit {
    public void eat(){
        System.out.println("Orange");
    }
}
 
class Factory {
    public static Fruit getInstance(String ClassName) {
        Fruit f=null;
        try {
            f=(Fruit)Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return f;
    }
}
 
class Client {
    public static void main(String[] a) {
        Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
        if(f!=null){
            f.eat();
        }
    }
}

四、BeanFactory 和 ApplicationContext有什么区别?

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

依赖关系

  • BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。

ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:

-继承MessageSource,因此支持国际化。

  • 统一的资源文件访问方式。
  • 提供在监听器中注册bean的事件。
  • 同时加载多个配置文件。
    载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

加载方式

BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题。如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常。

ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误,这样有利于检查所依赖属性是否注入。 ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

创建方式

BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。

注册方式

BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。

SpringBoot 整合 redis

引入 redis 的启动器。 data-redis 。引入后再配置文件进行配置 redis 的 host 。然后通过 redistemplate 就可以进行操作了。会乱码,默认使用的是 jdk 的序列化 json 器。需要改成 jackson 。自己实现一个 RedisTmeplate 。泛型为 object , object 。再实现 CacheManager 。就会发现缓存变成 json 形式了。

在这里插入图片描述

题外话

笔者在这里给各位整合最新的真实大厂面试题,有需要的小伙伴可以加群:1149778920 暗号:qf
来自行领取
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐