SpringBoot @Component自动装载继承类、实现类到Map

本文探讨了Spring框架中组件扫描的功能,通过示例展示了如何使用@Component注解将类注册为Spring Bean。同时,介绍了策略模式的应用,通过一个测试类获取接口A的所有实现类,并将其存储在Map中,便于动态选择策略。
摘要由CSDN通过智能技术生成

实现类:
有一个接口A

public interface A {
     //TODO
}

三个实现接口的类B、C和D,其中D没有注释@Component

@Component
public class B implements A {
}
@Component
public class C implements A {
}
public class D implements A {
}

我们通过一个测试类来获得接口A的实现类:

@Component
public class test {
    private final Map<String, A> strategyMap = new HashMap<>();

    //此时这个map的key是实现类的名字(驼峰命名法),value是实现类
    //需要通过构造器来进行
    test(Map<String,A> map){
        this.strategyMap.clear();
        map.forEach((k, v)-> this.strategyMap.put(k, v));
    }

    public void t(){
        Iterator it = strategyMap.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String key = (String) entry.getKey();
            System.out.println("key:" + key);
        }
    }
}

通过方法t()获得map的内容:

key:b
key:c

因为D类没有@Component,所以我们的map中获得不到

继承类同理:
有一个类A

public class A {
     //TODO
}

三个继承A类的类B、C和D,其中D没有注释@Component

@Component
public class B extends A {
}
@Component
public class C extends A {
}
public class D extends A {
}
@Component
public class test {
    private final Map<String, A> strategyMap = new HashMap<>();

    //此时这个map的key是实现类的名字(驼峰命名法),value是实现类
    //需要通过构造器来进行
    test(Map<String,A> map){
        this.strategyMap.clear();
        map.forEach((k, v)-> this.strategyMap.put(k, v));
    }

    public void t(){
        Iterator it = strategyMap.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String key = (String) entry.getKey();
            System.out.println("key:" + key);
        }
    }
}

通过方法t()获得map的内容:

key:b
key:c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值