微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringBoot里获取实现接口的所有实例

记录一个需求:

需求:升级组件,目前有几个组件需要统一管理升级,后面还可能要扩展,所以使用工厂模式实现,然后再升级中,不确定有多少个升级包,所有需要所有的升级都要处理一遍,有包就执行升级没有就不升级,所有我要实现,在spring下,怎么获取实现接口下的所有实例,然后循环调用

首先要定义一个Context,Spring在初始化IOC时,会调用实现了ApplicationContextAware接口的类,将他的容器对象传给实现方法


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @author cf
 * @projectName cssa-toolBox
 * @date 2022/8/24上午 9:33
 */
@Component
public class SystemAppContext implements ApplicationContextAware {
    private static ApplicationContext context = null;

    /**
     * Spring在初始化IOC时,会调用实现了ApplicationContextAware接口的类,将他的容器对象传给实现方法
     *
     * @param context IOC创建的容器
     */
    public void setApplicationContext(ApplicationContext context) {
        SystemAppContext.setContext(context);

    }


    /**
     * 取得存储在静态变量中的ApplicationContext.
     */
    public static ApplicationContext getContext() {

        if (context == null) {

            throw new IllegalStateException("applicaitonContext未注入");
        }
        return context;

    }

    /**
     * 存储静态变量中的ApplicationContext.
     */
    public static void setContext(ApplicationContext context) {
        SystemAppContext.context = context;
    }

    /**
     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型
     */
    public static <T> T getBean(String name) {
        if (context == null)
            throw new IllegalStateException("applicaitonContext未注入");
        try {
            return (T) context.getBean(name);

        } catch (BeansException e) {
            e.printstacktrace();
        }

        return (T) null;

    }

}

然后使用:

//获取所有实例
  Map<String, ComponentUpgradeInterface> animalMap = SystemAppContext.getContext().getBeansOfType(ComponentUpgradeInterface.class);
        animalMap.forEach((s, componentUpgradeInterface) -> {
            try {
            //循环得到实例,执行实例方法,所有都执行一遍
                componentUpgradeInterface.backComponentUpgradeZip(params);
            } catch (Exception e) {
                e.printstacktrace();
            }
        });

ok了

原文地址:https://www.jb51.cc/wenti/3284959.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐