SpringBoot实现初始化的三种策略模式

 更新时间:2024年12月23日 09:36:47   作者:The-Venus  
本文主要介绍了SpringBoot实现初始化的三种策略模式,包括默认初始化策略、懒加载初始化策略和自定义初始化策略,具有一定的参考价值,感兴趣的可以了解一下

前言

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

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

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

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

几种初始化策略

image-20231118083002529

默认初始化策略

默认初始化策略是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示例:

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

- @Bean方法示例:

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

- ApplicationListener示例:

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

总结

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

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

到此这篇关于SpringBoot实现初始化的几种策略模式的文章就介绍到这了,更多相关SpringBoot 初始化策略模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java编程GUI中的事件绑定代码示例

    Java编程GUI中的事件绑定代码示例

    这篇文章主要介绍了Java编程GUI中的事件绑定代码示例,简单介绍了绑定的概念,然后分享了相关代码,具有一定参考价值,需要的朋友可以参考下。
    2017-10-10
  • PowerJob的UserService工作流程源码解读

    PowerJob的UserService工作流程源码解读

    这篇文章主要介绍了PowerJob的UserService工作流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 详解Elastic Search搜索引擎在SpringBoot中的实践

    详解Elastic Search搜索引擎在SpringBoot中的实践

    本篇文章主要介绍了Elastic Search搜索引擎在SpringBoot中的实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • spring boot中的properties参数配置详解

    spring boot中的properties参数配置详解

    这篇文章主要介绍了spring boot中的properties参数配置,需要的朋友可以参考下
    2017-09-09
  • Spring的懒加载机制原理和配置详解

    Spring的懒加载机制原理和配置详解

    这篇文章主要介绍了Spring的懒加载机制原理和配置详解,Spring提供了懒加载机制,所谓的懒加载机制就是可以规定指定的bean不在启动时立即创建,而是在后续第一次用到时才创建,从而减轻在启动过程中对时间和内存的消耗,需要的朋友可以参考下
    2023-10-10
  • 使用Java实现系统托盘功能的介绍(附源码以及截图)

    使用Java实现系统托盘功能的介绍(附源码以及截图)

    本篇文章介绍了,在Java中实现系统托盘功能的详解,文中附源码以及截图介绍。需要的朋友参考下
    2013-05-05
  • 一文深入理解Java中的java.lang.reflect.InvocationTargetException错误

    一文深入理解Java中的java.lang.reflect.InvocationTargetException错误

    这篇文章主要给大家介绍了关于Java中java.lang.reflect.InvocationTargetException错误的相关资料,java.lang.reflect.InvocationTargetException是Java中的一个异常类,它通常是由反射调用方法时抛出的异常,需要的朋友可以参考下
    2024-03-03
  • JVM 方法调用之静态分派(详解)

    JVM 方法调用之静态分派(详解)

    下面小编就为大家带来一篇JVM 方法调用之静态分派(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java线程死锁代码详解

    Java线程死锁代码详解

    本篇文章主要介绍了Java线程死锁代码详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-11-11
  • Java实现在Word指定位置插入分页符

    Java实现在Word指定位置插入分页符

    在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入。本文将以Java代码来操作以上两种文档分页需求,需要的可以参考一下
    2022-04-04

最新评论