【SpringBoot系列】初始化机制几种实现策略模式

这篇具有很好参考价值的文章主要介绍了【SpringBoot系列】初始化机制几种实现策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【SpringBoot系列】初始化机制几种实现策略模式

前言

Spring Boot是一个用于快速构建基于Spring框架的应用程序的开发框架。

它提供了许多便捷的功能和特性,使得开发者可以更加高效地开发和部署应用程序。

其中,初始化策略是Spring Boot中一个重要的概念,它决定了应用程序在启动时如何进行初始化和配置。

本文将介绍Spring Boot中的三种主要的初始化策略,帮助读者更好地理解和应用Spring Boot。


几种初始化策略

【SpringBoot系列】初始化机制几种实现策略模式

默认初始化策略

默认初始化策略是Spring Boot中最常用的初始化策略之一。它基于约定大于配置的原则,通过自动配置和默认值来初始化应用程序的各个组件。默认初始化策略的目标是尽可能地减少开发者的配置工作,提供一种快速启动和部署应用程序的方式。

在默认初始化策略下,Spring Boot会根据应用程序的依赖和配置自动配置各个组件。它会扫描应用程序的类路径,根据类路径上的配置文件和注解来自动配置组件。例如,当应用程序引入了Spring Data JPA依赖时,Spring Boot会自动配置JPA相关的组件,包括数据源、实体管理器、事务管理器等。

默认初始化策略的优点是简单、快速和方便。开发者只需要引入相应的依赖,Spring Boot就会自动配置和初始化相关的组件,大大减少了繁琐的配置工作。同时,Spring Boot提供了一些默认的配置值,使得开发者可以快速启动和运行应用程序。

下面是一个示例,演示了如何使用默认初始化策略来配置一个简单的Spring Boot应用程序:

@SpringBootApplication
public class MyApplication {

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

@RestController
public class HelloController {
    @GetMapping("/hello")
        public String hello() {
        return "Hello, Spring Boot!";
        }
    }
}

在这个示例中,我们使用了@SpringBootApplication注解来标记应用程序的入口类。这个注解包含了许多默认的配置,包括自动扫描、自动配置等。我们还定义了一个简单的HelloController,用于处理/hello请求,并返回一个字符串。通过运行这个应用程序,我们可以在浏览器中访问http://localhost:8080/hello,看到返回的字符串"Hello, Spring Boot!"。

通过这个示例,我们可以看到默认初始化策略的简单和便利之处。开发者只需要编写少量的代码,Spring Boot就会自动配置和初始化应用程序的各个组件,使得开发和部署应用程序变得更加快速和方便。

懒加载初始化策略

​ 懒加载初始化策略是Spring Boot中的一种初始化策略,它与默认初始化策略相反。懒加载初始化策略是指在需要使用某个组件时才进行初始化,而不是在应用程序启动时就进行初始化。这种策略可以减少应用程序的启动时间和内存占用,提高应用程序的性能。

在懒加载初始化策略下,Spring Boot会延迟初始化组件,直到它们被使用时才进行初始化。这样可以避免不必要的初始化和资源占用。例如,当应用程序引入了Spring Data JPA依赖时,懒加载初始化策略会延迟初始化JPA相关的组件,直到第一次使用JPA功能时才进行初始化。

懒加载初始化策略的优点是减少了应用程序的启动时间和内存占用。由于只有在需要使用某个组件时才进行初始化,所以可以避免不必要的初始化和资源占用。这对于大型应用程序和资源有限的环境非常有用。

下面是一个示例,演示了如何使用懒加载初始化策略来配置一个简单的Spring Boot应用程序:

@SpringBootApplication
public class MyApplication {

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

    @RestController
    public class HelloController {

    @Autowired
    private MyService myService;

        @GetMapping("/hello")
        public String hello() {
            return myService.getMessage();
        }
    }

    @Service
    @Lazy
    public class MyService {

        public String getMessage() {
            return "Hello, Spring Boot!";
        }
    }
}

在这个示例中,我们使用了@Lazy注解来标记MyService组件。这个注解告诉Spring Boot在需要使用MyService组件时才进行初始化。我们还定义了一个简单的HelloController,通过myService来获取消息,并返回给客户端。通过运行这个应用程序,我们可以在浏览器中访问http://localhost:8080/hello,看到返回的字符串"Hello, Spring Boot!"。

通过这个示例,我们可以看到懒加载初始化策略的优点。MyService组件只有在需要使用时才进行初始化,这样可以减少应用程序的启动时间和内存占用。这对于大型应用程序和资源有限的环境非常有用。

自定义初始化策略

​ 自定义初始化策略有时候默认和懒加载策略不能满足我们的要求,此时可以自定义初始化策略。例如:- ApplicationRunner和CommandLineRunner:这两个接口的实现bean会在Spring Boot启动后执行,我们可以在这两个接口的run方法中自定义初始化逻辑。
- 自定义@Bean方法:我们可以在@Configuration类中自定义@Bean方法,在方法体中编写初始化逻辑,这个bean会在Spring Boot启动时被调用。
- 自定义ApplicationListener:实现ApplicationListener接口,在其onApplicationEvent方法中自定义初始化逻辑。当Spring Boot事件被触发时便会执行我们的初始化逻辑。这些都是自定义初始化策略的实现方式,可以完全按照我们的要求来控制bean的初始化时机。

ApplicationRunner示例:

java
@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) {
        // 自定义初始化逻辑
    }
}

- @Bean方法示例:

java
@Configuration
public class MyConfig {
    @Bean
    public MyBean myBean() {
        // 自定义初始化逻辑    
        return new MyBean();
    }
}

- ApplicationListener示例:

java
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 自定义初始化逻辑
    }
}

总结

通过本文的介绍,我们了解了Spring Boot中的三种主要的初始化策略:自动配置、条件化配置和显式配置。自动配置是Spring Boot的核心特性之一,它通过根据应用程序的依赖和配置来自动配置应用程序的各个组件。条件化配置允许开发者根据特定的条件来配置应用程序的组件,从而实现更加灵活和可定制的配置。显式配置则是通过编写代码来手动配置应用程序的组件,提供了最大的灵活性和控制力。

不同的初始化策略适用于不同的场景和需求。开发者可以根据具体的情况选择合适的初始化策略,以满足应用程序的需求。同时,深入理解和掌握Spring Boot的初始化策略,对于开发高效、可维护和可扩展的应用程序也是非常重要的。

希望本文对读者能够提供一些有价值的信息和指导,帮助他们更好地理解和应用Spring Boot中的初始化策略。通过合理地选择和使用初始化策略,开发者可以更加高效地开发和部署应用程序,提高开发效率和应用程序的性能。


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

【SpringBoot系列】初始化机制几种实现策略模式文章来源地址https://www.toymoban.com/news/detail-464684.html

到了这里,关于【SpringBoot系列】初始化机制几种实现策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 结构体声明、定义和初始化的几种方式

    五种结构体声明方式: 直接声明结构体类型 声明结构体类型的同时定义结构体变量 不指定结构体名而直接定义结构体变量 使用结构体标记和类型别名 直接声明结构体别名 在C语言中,标记(tag)是在定义struct, union或enum之后使用的标识符。 之所以称其为结构体的“

    2023年04月11日
    浏览(42)
  • Java 中 Map 初始化的几种方法

    方式1:传统方式 方式2:java8新特性-双括号初始化 匿名内部类通常会导致内存泄漏问题,因为它会隐式地持有外部类的引用,如果外部类的引用一直存在而没有释放,它所持有的内存也就不会被垃圾回收机制回收,产生内存泄漏。而通过使用静态内部类或者弱引用等技术可以

    2024年02月05日
    浏览(52)
  • QTextDocument的使用方法及几种初始化方式

    qtextDocument并不像控件一样可以通过拖拽方式拉到设计器中使用,也不能直接声明就可以初始化使用,而是需要通过包涵库文件的方式包涵在当前的窗体文件中。 如: 上面说了Qtextdocument并不是控件,它是辅助配合QT中的文本编辑控件进行文本操作的类库。 QTextDocument在使用之

    2024年02月09日
    浏览(45)
  • C语言中结构体初始化并清零的方法有几种?

    结构体初始化清零方法 在C语言中,结构体初始化并清零的方法有以下几种: 手动赋值为0:结构体定义后在函数内手动将每个成员都赋值为0。例如: 使用memset()函数:可以使用  memset()  函数将结构体的所有成员都设置为0。例如: C99标准的方式:C99标准新增了一个特性,可

    2024年02月17日
    浏览(38)
  • STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

    在STM32的HAL库使用中,会发现库函数大都被设计成了一对: HAL_PPP/PPPP_Init HAL_PPP/PPPP_MspInit 而且HAL_PPP/PPPP_MspInit函数的defination前面还会有__weak 上面的PPP/PPPP代表常见外设的名称为3个字符或者4个字符 怎么理解这个设计呢? 2.1 结论 首先说结论: HAL_PPP/PPPP_Init 是与具体芯片

    2024年02月13日
    浏览(55)
  • android系列-init 初始化日志

    1.FirstStageMain 2.InitKernelLogging  3.KernelLogger  4.OpenKmsg 

    2024年02月02日
    浏览(80)
  • SpringBoot搭建WebSocket初始化

    1.java后端的maven添加websocket依赖 2.实例化ServerEndpointExporter对象, 3.创建一个类,该类的功能是提供websocket服务 注意:这里填写的map的key是uuid变量,不是\\\"uuid\\\" websocket_map.get(uuid); 接下来需要控制器进行页面的跳转 前端测试发起请求获取uuid,生成二维码,连接websocket 创建了一个

    2024年02月14日
    浏览(36)
  • HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂

    先来看看HashMap中的成员属性 解释: size 当前的容器中Entry的数量,也就是当前K-V的数量 loadFactory 装载因子,用来衡量HashMap满的程度, loadFactory的默认值是0.75 threshold 临界值, 当实际KV数量超过threshold时,就会触发扩容机制 。 threshold = capatity * loadFactory 容量capatity 除了以上这

    2023年04月26日
    浏览(37)
  • 【K8S系列】快速初始化⼀个最⼩集群

    走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级重要 蓝色 :用来标记二级重要 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言

    2024年02月04日
    浏览(50)
  • 【kubernetes系列】kubernetes之initcontainer初始化容器

    Init Container就是用来做初始化工作的容器,可以是一个或者多个,如果有多个的话,这些容器会按定义的顺序依次执行,只有所有的Init Container执行完后,主容器才会被启动。我们知道一个Pod里面的所有容器是共享数据卷和网络命名空间的,所以Init Container里面产生的数据可以

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包