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加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 二叉树递归迭代及morris层序前中后序遍历详解

    二叉树递归迭代及morris层序前中后序遍历详解

    这篇文章主要为大家介绍了二叉树递归迭代详解及二叉树的morris遍历、层序遍历、前序遍历、中序遍历、后序遍历示例分析,有需要的朋友可以借鉴参考下
    2021-11-11
  • Spring Boot Starter 自动装配原理全解析

    Spring Boot Starter 自动装配原理全解析

    Spring Boot Starter 的核心设计理念是 约定优于配置,其核心实现基于 自动配置(Auto-Configuration) 和 条件化注册(Conditional Registration),这篇文章主要介绍了Spring Boot Starter 自动装配原理全解析,需要的朋友可以参考下
    2025-04-04
  • SpringBoot打印详细启动异常信息

    SpringBoot打印详细启动异常信息

    这篇文章主要介绍了SpringBoot打印详细启动异常信息,本文包含了详细的过程解析与案例,概要的说明了如何去使用打印启动异常信息,需要的朋友可以参考下
    2021-06-06
  • 基于JavaMail实现邮件发送

    基于JavaMail实现邮件发送

    这篇文章主要为大家详细介绍了基于JavaMail实现邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • springboot整合mybatis实现数据库的更新批处理方式

    springboot整合mybatis实现数据库的更新批处理方式

    这篇文章主要介绍了springboot整合mybatis实现数据库的更新批处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • springboot 如何解决static调用service为null

    springboot 如何解决static调用service为null

    这篇文章主要介绍了springboot 如何解决static调用service为null的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中后台线程实例解析

    Java中后台线程实例解析

    这篇文章主要介绍了Java中后台线程实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Spring单元测试控制Bean注入的方式

    Spring单元测试控制Bean注入的方式

    这篇文章主要介绍了Spring单元测试控制Bean注入的方式,其中续注意的是在Bean上加@Order(xxx)是无法控制bean注入的顺序的,需要的可以参考一下
    2023-04-04
  • SpringBoot基于RabbitMQ实现消息延迟队列方案及使用场景

    SpringBoot基于RabbitMQ实现消息延迟队列方案及使用场景

    在很多的业务场景中,延时队列可以实现很多功能,此类业务中,一般上是非实时的,需要延迟处理的,需要进行重试补偿的,这篇文章主要介绍了SpringBoot基于RabbitMQ实现消息延迟队列方案及使用场景,需要的朋友可以参考下
    2024-04-04
  • springboot枚举类型传递的步骤

    springboot枚举类型传递的步骤

    这篇文章主要介绍了springboot枚举类型传递的步骤,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04

最新评论