Spring指定bean在哪個應用加載(示例詳解)
更新時間:2023年08月05日 11:23:49 作者:kenick
本文通過實例代碼介紹了Spring指定bean在哪個應用加載,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
1.背景
某項目,spring架構,有2個不同的WebAppApplication入口,大部分service類共用,小部分類有區(qū)別,只需要在一個應用中加載,不需要在另一個應用中加載.
2.實現(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"; }
實現(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 { //獲取注解中指定的應用名稱 MergedAnnotation<LimitBeanLoad> limitAnnotation = metadata.getAnnotations().get(LimitBeanLoad.class); String annotationAppName = (String) limitAnnotation.getValue("value").orElse(null); //判斷當前應用是否符合指定 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; } }
使用注解
到此這篇關于Spring指定bean在哪個應用加載的文章就介紹到這了,更多相關Spring指定bean加載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot整合mybatis實現(xiàn)數(shù)據(jù)庫的更新批處理方式
這篇文章主要介紹了springboot整合mybatis實現(xiàn)數(shù)據(jù)庫的更新批處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03springboot 如何解決static調用service為null
這篇文章主要介紹了springboot 如何解決static調用service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot基于RabbitMQ實現(xiàn)消息延遲隊列方案及使用場景
在很多的業(yè)務場景中,延時隊列可以實現(xiàn)很多功能,此類業(yè)務中,一般上是非實時的,需要延遲處理的,需要進行重試補償?shù)?這篇文章主要介紹了SpringBoot基于RabbitMQ實現(xiàn)消息延遲隊列方案及使用場景,需要的朋友可以參考下2024-04-04