Spring指定bean在哪個(gè)應(yīng)用加載(示例詳解)
1.背景
某項(xiàng)目,spring架構(gòu),有2個(gè)不同的WebAppApplication入口,大部分service類共用,小部分類有區(qū)別,只需要在一個(gè)應(yīng)用中加載,不需要在另一個(gè)應(yīng)用中加載.
2.實(shí)現(xiàn)代碼
自定義限制注解
package mis.shared.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @description 限制bean在指定application下加載 * webAppApplication * webSmartApplication * @date 2023/08/04 */ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface LimitBeanLoad { String value() default "webSmartApplication"; }
實(shí)現(xiàn)Spring的Condition接口
package mis.shared.annotation; import com.bestvike.linq.Linq; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.annotation.MergedAnnotation; import org.springframework.core.type.AnnotatedTypeMetadata; /** * @description spring加載bean條件類 * @date 2023/08/04 */ @Slf4j public class SpringLoadBeanCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { try { //獲取注解中指定的應(yīng)用名稱 MergedAnnotation<LimitBeanLoad> limitAnnotation = metadata.getAnnotations().get(LimitBeanLoad.class); String annotationAppName = (String) limitAnnotation.getValue("value").orElse(null); //判斷當(dāng)前應(yīng)用是否符合指定 String[] beanDefinitionNames = context.getRegistry().getBeanDefinitionNames(); long limitAppCount = Linq.of(beanDefinitionNames).where(p -> p.equals(annotationAppName)).stream().count(); return limitAppCount > 0; } catch (Exception e) { } return true; } }
使用注解
到此這篇關(guān)于Spring指定bean在哪個(gè)應(yīng)用加載的文章就介紹到這了,更多相關(guān)Spring指定bean加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot Starter 自動(dòng)裝配原理全解析
Spring Boot Starter 的核心設(shè)計(jì)理念是 約定優(yōu)于配置,其核心實(shí)現(xiàn)基于 自動(dòng)配置(Auto-Configuration) 和 條件化注冊(Conditional Registration),這篇文章主要介紹了Spring Boot Starter 自動(dòng)裝配原理全解析,需要的朋友可以參考下2025-04-04SpringBoot打印詳細(xì)啟動(dòng)異常信息
這篇文章主要介紹了SpringBoot打印詳細(xì)啟動(dòng)異常信息,本文包含了詳細(xì)的過程解析與案例,概要的說明了如何去使用打印啟動(dòng)異常信息,需要的朋友可以參考下2021-06-06基于JavaMail實(shí)現(xiàn)郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了基于JavaMail實(shí)現(xiàn)郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03springboot整合mybatis實(shí)現(xiàn)數(shù)據(jù)庫的更新批處理方式
這篇文章主要介紹了springboot整合mybatis實(shí)現(xiàn)數(shù)據(jù)庫的更新批處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03springboot 如何解決static調(diào)用service為null
這篇文章主要介紹了springboot 如何解決static調(diào)用service為null的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot基于RabbitMQ實(shí)現(xiàn)消息延遲隊(duì)列方案及使用場景
在很多的業(yè)務(wù)場景中,延時(shí)隊(duì)列可以實(shí)現(xiàn)很多功能,此類業(yè)務(wù)中,一般上是非實(shí)時(shí)的,需要延遲處理的,需要進(jìn)行重試補(bǔ)償?shù)?這篇文章主要介紹了SpringBoot基于RabbitMQ實(shí)現(xiàn)消息延遲隊(duì)列方案及使用場景,需要的朋友可以參考下2024-04-04