最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 核心接口與擴展點詳細指南(最佳實踐)

 更新時間:2026年01月05日 14:35:54   作者:越重天  
本文介紹了Spring Boot的核心擴展點,包括容器啟動與初始化、環(huán)境配置與屬性處理、Bean定義與注冊、Bean生命周期管理、條件裝配與自動配置、配置屬性綁定、事務管理等,通過這些擴展點,開發(fā)者可以精準調(diào)控應用的每個行為,感興趣的朋友跟隨小編一起看看吧

Spring Boot 核心接口與擴展點詳細指南

引言

Spring Boot的便捷背后,隱藏著一套精妙而強大的擴展機制。無論是容器啟動的瞬間,還是Bean生命的各個階段,亦或是Web請求的完整鏈路,框架都為我們預留了豐富的擴展接口。這些接口如同Spring Boot的“穴位”,掌握它們便能精準調(diào)控應用的每一個行為。

本文系統(tǒng)梳理了Spring Boot中二十余類核心擴展點,從ApplicationContextInitializer的啟動初始化,到BeanPostProcessor的實例化干預,再到WebMvcConfigurerWeb定制,不僅詳解各接口的作用與執(zhí)行時機,更結合典型場景說明實踐要點。

如果你希望深入理解框架原理,或是需要實現(xiàn)特定定制需求,這份指南都將成為你探索Spring Boot內(nèi)部世界的權威手冊

一、容器啟動與初始化階段

1.ApplicationContextInitializer

作用:在Spring容器刷新之前執(zhí)行自定義的初始化邏輯,用于在容器啟動的最早期進行配置或修改。

使用場景

  • 需要最早設置一些環(huán)境變量或系統(tǒng)屬性
  • 注冊自定義的PropertySource
  • 在容器啟動前執(zhí)行一些預檢查或初始化工作

示例代碼

// 在Spring容器刷新之前執(zhí)行
public class MyInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        // 注冊自定義屬性源
        MapPropertySource propertySource = new MapPropertySource("myProperties", 
            Collections.singletonMap("custom.key", "custom-value"));
        applicationContext.getEnvironment().getPropertySources().addFirst(propertySource);
        // 設置一些系統(tǒng)屬性
        System.setProperty("some.key", "some-value");
    }
}
// 使用方式:META-INF/spring.factories
// org.springframework.context.ApplicationContextInitializer=com.example.MyInitializer

注意事項

  • 執(zhí)行時機非常早,此時Bean容器還沒有創(chuàng)建
  • 可以通過SpringApplication.addInitializers()spring.factories注冊
  • 通常用于框架級別的初始化

2.SpringApplicationRunListener

作用:監(jiān)聽Spring Boot應用啟動的各個階段事件,可以在不同階段插入自定義邏輯。

使用場景

  • 監(jiān)控應用啟動過程,記錄啟動耗時
  • 在不同啟動階段執(zhí)行特定邏輯(如環(huán)境準備完成后加載外部配置)
  • 實現(xiàn)應用啟動的性能監(jiān)控

核心方法

  • starting(): 應用啟動開始時
  • environmentPrepared(): 環(huán)境準備完成
  • contextPrepared(): ApplicationContext準備完成
  • contextLoaded(): ApplicationContext加載完成
  • started(): 應用啟動完成
  • running(): 應用運行中
  • failed(): 啟動失敗

3.ApplicationRunner 與 CommandLineRunner

作用:應用啟動完成后執(zhí)行特定業(yè)務邏輯,兩者功能類似但參數(shù)類型不同。

使用場景

  • 啟動后執(zhí)行數(shù)據(jù)初始化
  • 啟動后建立外部連接
  • 啟動后發(fā)送通知或執(zhí)行定時任務

區(qū)別對比

  • ApplicationRunner: 接收ApplicationArguments參數(shù),提供更豐富的參數(shù)解析功能
  • CommandLineRunner: 接收原始字符串數(shù)組參數(shù),更簡單直接

執(zhí)行順序控制

@Component
@Order(1)  // 通過@Order注解或實現(xiàn)Ordered接口控制執(zhí)行順序
public class FirstRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) {
        System.out.println("第一個執(zhí)行");
    }
}

二、環(huán)境配置與屬性處理

1.EnvironmentPostProcessor

作用:在Environment對象準備好后對其進行修改或增強。

使用場景

  • 從數(shù)據(jù)庫、遠程配置中心加載配置
  • 根據(jù)條件動態(tài)修改配置
  • 添加加密配置的解密邏輯

實戰(zhàn)示例

public class RemoteConfigProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication app) {
        // 從遠程配置中心獲取配置
        Map<String, Object> remoteConfig = fetchRemoteConfig();
        // 將遠程配置添加到Environment中
        MapPropertySource remoteSource = new MapPropertySource("remoteConfig", remoteConfig);
        env.getPropertySources().addFirst(remoteSource);
        // 動態(tài)激活Profile
        if (remoteConfig.containsKey("active.profiles")) {
            String profiles = (String) remoteConfig.get("active.profiles");
            env.setActiveProfiles(profiles.split(","));
        }
    }
}

2.PropertySourceLoader

作用:加載自定義格式的配置文件。

使用場景

  • 支持YAMLProperties以外的配置文件格式(如JSON、XML
  • 從非標準位置加載配置文件
  • 實現(xiàn)配置文件的加解密加載

三、Bean定義與注冊階段

1.BeanDefinitionRegistryPostProcessor

作用:在所有Bean定義被加載后,但在Bean實例化之前,可以修改或添加Bean定義。

使用場景

  • 動態(tài)注冊Bean定義(基于條件或配置)
  • 修改已注冊Bean定義的屬性
  • 實現(xiàn)Bean定義的掃描和自動注冊

與BeanFactoryPostProcessor的區(qū)別

  • BeanDefinitionRegistryPostProcessor更早執(zhí)行,可以注冊新的Bean定義
  • BeanFactoryPostProcessor只能修改已存在的Bean定義

執(zhí)行時機圖解

Spring容器啟動
    ↓
加載Bean定義
    ↓
BeanDefinitionRegistryPostProcessor執(zhí)行(可注冊新Bean)
    ↓
BeanFactoryPostProcessor執(zhí)行(只能修改已有Bean)
    ↓
Bean實例化

2.ImportBeanDefinitionRegistrar

作用:與@Import注解配合使用,動態(tài)注冊Bean定義到容器中。

使用場景

  • 實現(xiàn)類似@EnableXXX的注解驅動配置
  • 根據(jù)條件選擇性注冊Bean
  • 批量掃描并注冊Bean

典型應用

// 1. 定義注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(MyComponentRegistrar.class)
public @interface EnableMyComponents {
    String[] basePackages() default {};
}
// 2. 實現(xiàn)Registrar
public class MyComponentRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata, 
                                      BeanDefinitionRegistry registry) {
        // 獲取注解屬性
        Map<String, Object> attrs = metadata.getAnnotationAttributes(
            EnableMyComponents.class.getName());
        String[] packages = (String[]) attrs.get("basePackages");
        // 掃描并注冊Bean
        ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry);
        scanner.scan(packages);
    }
}
// 3. 使用
@EnableMyComponents(basePackages = "com.example.components")
@Configuration
public class AppConfig {}

四、Bean生命周期管理

1.BeanPostProcessor

作用:在Bean初始化前后執(zhí)行自定義邏輯,是Spring擴展中最常用、最強大的接口之一。

使用場景

  • Bean的代理增強(如AOP、事務)
  • Bean的屬性驗證或修改
  • 為Bean添加監(jiān)聽器或處理器
  • 實現(xiàn)自定義的依賴注入邏輯

執(zhí)行時機

public class MyBeanPostProcessor implements BeanPostProcessor {
    // Bean初始化之前調(diào)用(在afterPropertiesSet和init-method之前)
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        // 可以返回包裝對象
        return bean;
    }
    // Bean初始化之后調(diào)用(在afterPropertiesSet和init-method之后)
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        // 通常用于返回代理對象
        if (bean instanceof MyService) {
            return Proxy.newProxyInstance(...); // 創(chuàng)建代理
        }
        return bean;
    }
}

重要實現(xiàn)類

  • AutowiredAnnotationBeanPostProcessor: 處理@Autowired注解
  • CommonAnnotationBeanPostProcessor: 處理@Resource、@PostConstruct等
  • AbstractAutoProxyCreator: AOP代理創(chuàng)建器

2.InstantiationAwareBeanPostProcessor

作用:在Bean實例化前后執(zhí)行更細粒度的控制,甚至可以阻止默認實例化過程。

使用場景

  • 實現(xiàn)自定義的實例化邏輯(如使用工廠方法)
  • 在屬性注入前進行驗證或修改
  • 實現(xiàn)類似@Value的注解解析

特殊能力

public class MyInstantiationProcessor implements InstantiationAwareBeanPostProcessor {
    // 1. 可以完全接管Bean的實例化過程
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) {
        if (beanClass == SpecialBean.class) {
            // 返回自定義實例,Spring將跳過默認實例化
            return createSpecialBean();
        }
        return null; // 返回null則繼續(xù)Spring默認實例化
    }
    // 2. 控制是否進行屬性注入
    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) {
        if (bean instanceof ReadOnlyBean) {
            return false; // 返回false則跳過屬性注入
        }
        return true;
    }
    // 3. 處理屬性值
    @Override
    public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) {
        // 修改或添加屬性值
        MutablePropertyValues mpvs = (pvs instanceof MutablePropertyValues) ?
            (MutablePropertyValues) pvs : new MutablePropertyValues(pvs);
        mpvs.add("customProperty", "customValue");
        return mpvs;
    }
}

3.InitializingBean 與 DisposableBean

作用:Bean生命周期回調(diào)接口,分別在屬性設置完成后和銷毀前執(zhí)行。

使用場景

  • Bean的初始化邏輯(如建立連接、加載數(shù)據(jù))
  • Bean的資源清理(如關閉連接、釋放資源)

對比其他方式

@Component
public class LifecycleBean implements InitializingBean, DisposableBean {
    // 方式1:實現(xiàn)接口方法
    @Override
    public void afterPropertiesSet() {
        System.out.println("InitializingBean.afterPropertiesSet()");
    }
    @Override
    public void destroy() {
        System.out.println("DisposableBean.destroy()");
    }
    // 方式2:使用JSR-250注解
    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct");
    }
    @PreDestroy
    public void cleanup() {
        System.out.println("@PreDestroy");
    }
    // 方式3:XML配置的init-method和destroy-method
    public void customInit() {
        System.out.println("custom init-method");
    }
    public void customDestroy() {
        System.out.println("custom destroy-method");
    }
}
// 執(zhí)行順序:@PostConstruct → InitializingBean → init-method
// 銷毀順序:@PreDestroy → DisposableBean → destroy-method

4.SmartInitializingSingleton

作用:所有單例Bean都初始化完成后執(zhí)行,此時所有單例Bean都已就緒。

使用場景

  • Bean之間的依賴檢查
  • 啟動完成后執(zhí)行一些全局初始化
  • 注冊Bean到中央管理器

與ApplicationRunner的區(qū)別

  • SmartInitializingSingleton: Bean級別,在所有單例Bean準備好后執(zhí)行
  • ApplicationRunner: 應用級別,在Spring上下文完全啟動后執(zhí)行

5.Aware接口族

作用:讓Bean能夠感知到Spring容器中特定的對象。

常用Aware接口

  • ApplicationContextAware: 獲取ApplicationContext
  • BeanFactoryAware: 獲取BeanFactory
  • BeanNameAware: 獲取Bean名稱
  • EnvironmentAware: 獲取Environment
  • ResourceLoaderAware: 獲取ResourceLoader
  • MessageSourceAware: 獲取MessageSource
  • ApplicationEventPublisherAware: 獲取事件發(fā)布器

使用場景

@Component
public class MyService implements ApplicationContextAware, EnvironmentAware {
    private ApplicationContext context;
    private Environment environment;
    @Override
    public void setApplicationContext(ApplicationContext context) {
        this.context = context;
        // 可以動態(tài)獲取其他Bean或發(fā)布事件
        EventPublisher publisher = context.getBean(EventPublisher.class);
        publisher.publishEvent(new MyEvent(this));
    }
    @Override
    public void setEnvironment(Environment env) {
        this.environment = env;
        // 可以讀取配置
        String value = env.getProperty("my.config");
    }
}

注意事項:過度使用Aware接口會使代碼與Spring框架強耦合,應優(yōu)先使用依賴注入。

五、條件裝配與自動配置

1.Condition接口

作用:根據(jù)條件決定是否注冊Bean或配置類。

Spring Boot內(nèi)置條件注解

  • @ConditionalOnClass: 類路徑下存在指定類時生效
  • @ConditionalOnMissingClass: 類路徑下不存在指定類時生效
  • @ConditionalOnBean: 容器中存在指定Bean時生效
  • @ConditionalOnMissingBean: 容器中不存在指定Bean時生效
  • @ConditionalOnProperty: 配置屬性滿足條件時生效
  • @ConditionalOnExpression: SpEL表達式為true時生效
  • @ConditionalOnJava: 指定Java版本時生效
  • @ConditionalOnWebApplication: Web應用時生效
  • @ConditionalOnNotWebApplication: 非Web應用時生效

自定義條件

public class OnProductionCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        String profile = env.getProperty("spring.profiles.active", "dev");
        return "prod".equals(profile);
    }
}
// 使用自定義條件
@Configuration
@Conditional(OnProductionCondition.class)
public class ProductionConfig {
    // 只有生產(chǎn)環(huán)境才生效的配置
}

2.自動配置原理

自動配置流程

  1. Spring Boot啟動時加載META-INF/spring.factories中的EnableAutoConfiguration
  2. 通過AutoConfigurationImportFilter過濾不滿足條件的配置
  3. 通過AutoConfigurationImportListener監(jiān)聽自動配置過程
  4. 按順序應用自動配置類

自定義自動配置

// 1. 創(chuàng)建配置類
@Configuration
@ConditionalOnClass(MyService.class)  // 存在MyService類時才生效
@ConditionalOnMissingBean(MyService.class)  // 容器中沒有MyService Bean時才生效
@EnableConfigurationProperties(MyProperties.class)  // 啟用配置屬性
@AutoConfigureAfter(DataSourceAutoConfiguration.class)  // 在數(shù)據(jù)源配置之后
public class MyAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MyService myService(MyProperties properties) {
        return new MyService(properties.getUrl());
    }
}
// 2. 在META-INF/spring.factories中注冊
// org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.MyAutoConfiguration

六、配置屬性綁定

1.@ConfigurationProperties

作用:將配置文件中的屬性綁定到Java對象。

使用場景

  • 將相關配置屬性分組管理
  • 提供類型安全的配置訪問
  • 配置驗證和默認值設置

示例

// 1. 定義配置類
@ConfigurationProperties(prefix = "app.mail")
@Validated  // 支持JSR-303驗證
public class MailProperties {
    @NotEmpty
    private String host;
    @Min(1025)
    @Max(65535)
    private int port = 25;
    private boolean sslEnabled = false;
    // getter/setter省略
}
// 2. 啟用配置類
@Configuration
@EnableConfigurationProperties(MailProperties.class)
public class AppConfig {
}
// 3. 在application.yml中配置
// app:
//   mail:
//     host: smtp.example.com
//     port: 587
//     ssl-enabled: true

2.Binder

作用:編程式地將屬性綁定到對象。

使用場景

  • 動態(tài)綁定配置(如從數(shù)據(jù)庫加載配置)
  • 測試時手動綁定配置
  • 在非Spring管理的類中使用配置

七、Web相關擴展點

1.WebMvcConfigurer

作用:自定義Spring MVC配置。

主要配置項

  • 攔截器配置
  • 跨域配置
  • 消息轉換器
  • 視圖解析器
  • 靜態(tài)資源處理
  • 參數(shù)解析器

實戰(zhàn)配置

@Configuration
public class WebConfig implements WebMvcConfigurer {
    // 添加攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/static/**");
    }
    // 配置跨域
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("https://example.com")
                .allowedMethods("GET", "POST")
                .allowCredentials(true);
    }
    // 添加格式化器
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new DateFormatter("yyyy-MM-dd"));
    }
    // 配置消息轉換器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(0, new FastJsonHttpMessageConverter());
    }
}

2.HandlerInterceptor

作用:攔截請求,在控制器執(zhí)行前后進行處理。

使用場景

  • 權限驗證
  • 日志記錄
  • 性能監(jiān)控
  • 參數(shù)預處理

執(zhí)行流程

請求到達
    ↓
preHandle() // 返回true繼續(xù),false中斷
    ↓
Controller執(zhí)行
    ↓
postHandle() // 渲染視圖前
    ↓
渲染視圖
    ↓
afterCompletion() // 請求完成后

八、事件監(jiān)聽

1.ApplicationListener

作用:監(jiān)聽Spring應用事件。

常用事件類型

  • ApplicationStartingEvent: 應用啟動開始
  • ApplicationEnvironmentPreparedEvent: 環(huán)境準備完成
  • ApplicationPreparedEvent: 應用準備完成
  • ApplicationStartedEvent: 應用啟動完成
  • ApplicationReadyEvent: 應用準備就緒
  • ApplicationFailedEvent: 應用啟動失敗
  • ContextRefreshedEvent: 上下文刷新完成
  • ContextClosedEvent: 上下文關閉

異步事件監(jiān)聽

@Component
public class MyEventListener {
    // 同步監(jiān)聽
    @EventListener
    public void handleSyncEvent(ContextRefreshedEvent event) {
        // 同步處理
    }
    // 異步監(jiān)聽
    @Async
    @EventListener
    public void handleAsyncEvent(MyCustomEvent event) {
        // 異步處理
    }
    // 條件監(jiān)聽
    @EventListener(condition = "#event.success")
    public void handleConditionalEvent(OrderEvent event) {
        // 條件滿足時處理
    }
    // 監(jiān)聽多個事件
    @EventListener({ContextStartedEvent.class, ContextRefreshedEvent.class})
    public void handleMultipleEvents() {
        // 處理多個事件
    }
}

九、事務管理

1.@Transactional

作用:聲明式事務管理。

傳播行為

  • REQUIRED: 默認,如果存在事務則加入,否則新建
  • REQUIRES_NEW: 總是新建事務,掛起當前事務
  • NESTED: 嵌套事務
  • SUPPORTS: 支持當前事務,沒有則以非事務執(zhí)行
  • NOT_SUPPORTED: 非事務執(zhí)行,掛起當前事務
  • NEVER: 非事務執(zhí)行,有事務則拋出異常
  • MANDATORY: 必須在事務中執(zhí)行,否則拋出異常

隔離級別

  • DEFAULT: 使用數(shù)據(jù)庫默認
  • READ_UNCOMMITTED: 讀未提交
  • READ_COMMITTED: 讀已提交
  • REPEATABLE_READ: 可重復讀
  • SERIALIZABLE: 串行化

2.TransactionTemplate

作用:編程式事務管理。

使用場景

  • 需要精細控制事務邊界
  • 在同一個方法中需要多個獨立事務
  • 事務的回滾條件復雜

十、最佳實踐總結

1.擴展點選擇指南

需求場景推薦擴展點執(zhí)行時機注意事項
最早介入容器啟動ApplicationContextInitializer容器刷新前此時Bean還未創(chuàng)建
修改環(huán)境配置EnvironmentPostProcessor環(huán)境準備后可添加自定義PropertySource
動態(tài)注冊BeanImportBeanDefinitionRegistrar配置類導入時與@Import配合使用
修改Bean定義BeanFactoryPostProcessorBean定義加載后不能注冊新Bean
Bean初始化處理BeanPostProcessorBean初始化前后應用最廣泛的擴展點
應用啟動后執(zhí)行ApplicationRunner應用完全啟動后適合業(yè)務初始化
條件化配置@Conditional系列配置類加載時Spring Boot自動配置核心
Web MVC定制WebMvcConfigurerWeb應用啟動時替代已棄用的WebMvcConfigurerAdapter
事件處理@EventListener事件發(fā)布時支持異步和條件監(jiān)聽

2.執(zhí)行順序記憶口訣

啟動最早Initializer,
環(huán)境配置PostProcessor。
Bean定義三劍客:
RegistryPost最先到,
FactoryPost緊跟隨,
Import注冊在其中。
實例化時多攔截:
Instantiation最優(yōu)先,
屬性注入前后調(diào)。
初始化時回調(diào)多:
Aware接口先注入,
PostConstruct隨后到,
InitializingBean接著來,
BeanPostProcessor前后包。
全部就緒Singleton,
啟動完成Runner跑。

3.常見陷阱與解決方案

陷阱1:BeanPostProcessor不生效

  • 原因BeanPostProcessor本身也是Bean,需要被容器管理
  • 解決:確保實現(xiàn)類被@Component掃描或通過@Bean注冊

陷阱2:循環(huán)依賴

  • 原因BeanPostProcessor中依賴其他Bean可能導致循環(huán)依賴
  • 解決:實現(xiàn)PriorityOrdered接口提前初始化,或使用ObjectFactory延遲獲取

陷阱3:執(zhí)行順序問題

  • 原因:多個同類擴展點執(zhí)行順序不確定
  • 解決:實現(xiàn)Ordered接口或使用@Order注解

陷阱4:過早訪問Bean

  • 原因:在ApplicationContextInitializer中訪問未初始化的Bean
  • 解決:將邏輯移到SmartInitializingSingletonApplicationRunner

4.性能優(yōu)化建議

  1. 延遲初始化BeanPostProcessor中避免不必要的實例化
  2. 緩存結果Condition的matches方法結果可緩存
  3. 按需注冊ImportBeanDefinitionRegistrar中根據(jù)條件選擇性注冊
  4. 避免重量級操作ApplicationRunner中耗時應控制,避免影響啟動速度

以上就是詳細的Spring Boot擴展點指南,不僅列出了各個接口,還提供了實際應用場景、注意事項和最佳實踐,可以幫助開發(fā)者更好地理解和應用這些強大的擴展機制,希望大家能喜歡~

到此這篇關于Spring Boot 核心接口與擴展點詳細指南(最佳實踐)的文章就介紹到這了,更多相關Spring Boot 核心接口與擴展點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java運行windows的cmd命令簡單代碼

    java運行windows的cmd命令簡單代碼

    這篇文章主要介紹了java運行windows的cmd命令簡單代碼,有需要的朋友可以參考一下
    2013-12-12
  • SpringBoot實現(xiàn)分布式驗證碼登錄方案小結

    SpringBoot實現(xiàn)分布式驗證碼登錄方案小結

    驗證碼登錄作為一種有效的防護手段,可以防止惡意gongji、暴力pojie等,本文主要介紹了SpringBoot實現(xiàn)分布式驗證碼登錄方案小結,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • 一文詳解Java Stream的sorted自定義排序

    一文詳解Java Stream的sorted自定義排序

    Java stream中的sorted方法是用于對流中的元素進行排序的方法,它可以接受一個comparator參數(shù),用于指定排序規(guī)則,sorted方法返回一個新的流,其中的元素按照指定的排序規(guī)則進行排序,本文給大家詳細介紹了Java Stream的sorted自定義排序,需要的朋友可以參考下
    2025-06-06
  • 將Swagger2文檔導出為HTML或markdown等格式離線閱讀解析

    將Swagger2文檔導出為HTML或markdown等格式離線閱讀解析

    這篇文章主要介紹了將Swagger2文檔導出為HTML或markdown等格式離線閱讀,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • 詳解SpringBoot配置devtools實現(xiàn)熱部署

    詳解SpringBoot配置devtools實現(xiàn)熱部署

    本篇文章主要介紹了詳解SpringBoot配置devtools實現(xiàn)熱部署 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot項目打包部署到Tomcat的操作流程

    SpringBoot項目打包部署到Tomcat的操作流程

    在最近一個項目中,維護行里一個年代較為久遠的單體項目,需要將項目打包放到的tomcat服務器下運行,所以本文就給大家介紹一下SpringBoot項目打包部署到Tomcat的流程步驟,需要的朋友可以參考下
    2023-08-08
  • 對SpringBoot項目配置文件進行加密實現(xiàn)過程

    對SpringBoot項目配置文件進行加密實現(xiàn)過程

    文章介紹了如何在Spring Boot項目中使用Maven依賴和單元測試生成加密數(shù)據(jù),并將加密數(shù)據(jù)配置在`bootstrap.yml`或`application.yml`中,同時,分享了如何在不同環(huán)境中配置加密鹽,包括IDE啟動項、配置文件和Dockerfile
    2025-10-10
  • Java實現(xiàn)樹形結構的示例代碼

    Java實現(xiàn)樹形結構的示例代碼

    由于業(yè)務需要,后端需要返回一個樹型結構給前端,包含父子節(jié)點的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫中存儲好。本文將為大家分享Java現(xiàn)樹形結構的示例代碼,需要的可以參考下
    2022-05-05
  • Java正則替換手機號代碼實例

    Java正則替換手機號代碼實例

    本文的主要內(nèi)容是Java語言中正則表達式替換手機號的第4到第7位,實現(xiàn)方法十分簡單,同時涉及了一些正則表達式的相關用法,需要的朋友可以參考下。
    2017-09-09
  • 關于JAVA經(jīng)典算法40題(超實用版)

    關于JAVA經(jīng)典算法40題(超實用版)

    本篇文章小編為大家介紹一下,關于JAVA經(jīng)典算法40題(超實用版),有需要的朋友可以參考一下
    2013-04-04

最新評論

玉田县| 东阳市| 富宁县| 福清市| 隆尧县| 靖边县| 锦州市| 屏南县| 阜康市| 六安市| 鹰潭市| 温州市| 肃南| 和顺县| 库车县| 二手房| 旬邑县| 富民县| 张家界市| 革吉县| 渭南市| 南康市| 鄯善县| 桑植县| 孟连| 习水县| 景德镇市| 塔河县| 环江| 定结县| 宁明县| 义马市| 阜宁县| 武汉市| 萝北县| 察隅县| 临西县| 三明市| 涟源市| 咸阳市| 沾化县|