Spring指定bean在哪个应用加载(示例详解)
更新时间:2023年08月05日 11:23:49 作者: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加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
注册中心配置了spring security后客户端启动报错
这篇文章主要为大家介绍了注册中心配置了spring security后客户端启动报错问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07springboot+mysql+mybatis实现控制台打印sql
在Spring Boot中使用MyBatis与MySQL,并希望在控制台打印SQL语句,可以通过配置MyBatis的日志级别来实现,具有一定的参考价值,感兴趣的可以了解一下2024-01-01
最新评论