Spring集合类型依赖查找

集合类型依赖查找接口 - 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 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 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/Spr...

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

你可能感兴趣的:(java,spring)