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

333 阅读3分钟

Spring Boot中有3种主要的初始化策略:

默认初始化策略

默认初始化策略Spring Boot在启动时会初始化大多数的组件,这属于默认初始化策略。例如:- 自动配置:Spring Boot会根据类路径和配置文件中存在什么,自动配置相关bean。 - 自动扫描:Spring Boot会自动扫描@Component、@Service、@Repository等注解的bean并进行初始化。 - 嵌入式服务器:Spring Boot会自动根据依赖的web模块,启动Tomcat、Jetty或Undertow服务器。这些都是Spring Boot的默认初始化策略,无需用户干预,自动完成。

Spring Boot会自动初始化大部分组件,如:

@Service
public class MyService {
    // ...
}

懒加载初始化策略

懒加载初始化策略有些bean其实我们并不需要在启动时立即初始化,这时可以使用懒加载策略。例如:- @Lazy注解:可以在bean上使用@Lazy注解,这会告诉Spring只在该bean被首次请求时才进行初始化。 - 懒加载配置:在application.properties中配置spring.main.lazy-initialization=true,这会使得容器在启动时不急于初始化单例bean,等到首次请求时再初始化。这属于懒加载初始化策略,只有真正需要时才进行初始化。

使用@Lazy注解或懒加载配置:

@Service
@Lazy
public class 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提供了默认初始化策略来自动配置系统,也提供了懒加载策略来按需初始化bean。当这两种策略不满足需求时,我们还可以实现自定义初始化策略,这体现了策略模式在Spring Boot中的应用。

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