Spring指定bean在哪個應(yīng)用加載(示例詳解)
1.背景
某項目,spring架構(gòu),有2個不同的WebAppApplication入口,大部分service類共用,小部分類有區(qū)別,只需要在一個應(yīng)用中加載,不需要在另一個應(yīng)用中加載.
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 {
//獲取注解中指定的應(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在哪個應(yīng)用加載的文章就介紹到這了,更多相關(guān)Spring指定bean加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合mybatis實現(xiàn)數(shù)據(jù)庫的更新批處理方式
這篇文章主要介紹了springboot整合mybatis實現(xiàn)數(shù)據(jù)庫的更新批處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
springboot 如何解決static調(diào)用service為null
這篇文章主要介紹了springboot 如何解決static調(diào)用service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot基于RabbitMQ實現(xiàn)消息延遲隊列方案及使用場景
在很多的業(yè)務(wù)場景中,延時隊列可以實現(xiàn)很多功能,此類業(yè)務(wù)中,一般上是非實時的,需要延遲處理的,需要進行重試補償?shù)?這篇文章主要介紹了SpringBoot基于RabbitMQ實現(xiàn)消息延遲隊列方案及使用場景,需要的朋友可以參考下2024-04-04

