Spring集合类型依赖查找

26 篇文章 0 订阅

集合类型依赖查找接口 - ListableBeanFactory

  • 根据 Bean 类型查找
    • 获取同类型 Bean 名称列表
      • getBeanNamesForType(Class)
      • getBeanNamesForType(ResolvableType)
    • 获取同类型 Bean 实例列表
      • getBeansOfType(Class) 以及重载方法
  • 通过注解类型查找
    • 获取标注类型 Bean 名称列表
      • getBeanNamesForAnnotation
    • 获取标注类型 Bean 实例列表
      • getBeansWithAnnotation
    • 获取指定名称 + 标注类型 Bean 实例
      • findAnnotationOnBean

** SuperRumenz.java / Rumenz.java**

//SuperRumenz.java
package com.rumenz;
public class SuperRumenz {

    private String key;
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    @Override
    public String toString() {
        return "SuperRumenz{" +
                "key='" + key + '\'' +
                '}';
    }
}

//Rumenz.java
package com.rumenz;
public class Rumenz extends SuperRumenz{
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "Rumenz{" +
                "id=" + id +
                ", name='" + name + '\'' +
                "} " + super.toString();
    }

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

案例

package com.rumenz;
public class DemoApplication {

    public static void main(String[] args) {
         AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();
         ac.register(DemoApplication.class);
         ac.refresh();
         // 根据类型(SuperRumenz.class)获取所有Beand的实例
        Map<String, SuperRumenz> map = ac.getBeansOfType(SuperRumenz.class);
        map.forEach((k,v)->{
            System.out.println(String.format("k %s v %s",k,v));
        });
        // 根据类型(SuperRumenz.class)获取所有Bean的名称
        String[] beanNames = ac.getBeanNamesForType(SuperRumenz.class);
        Arrays.asList(beanNames).stream().forEach(System.out::println);

        // 通过注解获取Bean的名称
        String[] annotationBeanNames = ac.getBeanNamesForAnnotation(Bean.class);
        Arrays.asList(annotationBeanNames).stream().forEach(System.out::println);


        // 通过注解获取Bean的名称列表
        Map<String, Object> map1 = ac.getBeansWithAnnotation(Bean.class);

        map1.forEach((k1,v1)->{
            System.out.println(String.format("k1 %s v1 %s",k1,v1));
        });
        // 通过注解和类型获取Bean的实例,双重判定

        Bean bean = ac.findAnnotationOnBean("superRumenz", Bean.class);
        if(bean!=null){
            System.out.println(ac.getType("superRumenz"));
        }
        ac.close();
    }

    @Bean
    public Rumenz rumenz(){
        Rumenz rumenz = new Rumenz();
        rumenz.setId(123);
        rumenz.setName("入门小站");
        return rumenz;
    }
    @Bean
    public SuperRumenz superRumenz(){
        SuperRumenz sr = new SuperRumenz();
        sr.setKey("超级管理员");
        return sr;
    }
}

输出

k rumenz v Rumenz{id=123, name='入门小站'} SuperRumenz{key='null'}
k superRumenz v SuperRumenz{key='超级管理员'}
rumenz
superRumenz
rumenz
superRumenz
k1 rumenz v1 Rumenz{id=123, name='入门小站'} SuperRumenz{key='null'}
k1 superRumenz v1 SuperRumenz{key='超级管理员'}
class com.rumenz.SuperRumenz

在这里插入图片描述
源码:https://github.com/mifunc/Spring-Collection-Dependent-Lookup

原文: https://rumenz.com/rumenbiji/Spring-Collection-Dependent-Lookup.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值