集合类型依赖查找接口 - ListableBeanFactory
- 根据 Bean 类型查找
- 获取同类型 Bean 名称列表
- getBeanNamesForType(Class)
- getBeanNamesForType(ResolvableType)
- 获取同类型 Bean 实例列表
- getBeansOfType(Class) 以及重载方法
- 获取同类型 Bean 名称列表
- 通过注解类型查找
- 获取标注类型 Bean 名称列表
- getBeanNamesForAnnotation
- 获取标注类型 Bean 实例列表
- getBeansWithAnnotation
- 获取指定名称 + 标注类型 Bean 实例
- findAnnotationOnBean
- 获取标注类型 Bean 名称列表
** 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