Spring指定bean在哪个应用加载(示例详解)
作者:kenick
本文通过实例代码介绍了Spring指定bean在哪个应用加载,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
1.背景
某项目,spring架构,有2个不同的WebAppApplication入口,大部分service类共用,小部分类有区别,只需要在一个应用中加载,不需要在另一个应用中加载.
2.实现代码
自定义限制注解
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"; }
实现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加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!