集合类型依赖查找接口 - 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;}@Overridepublic String toString() {return "SuperRumenz{" +"key='" + key + '\'' +'}';}
}//Rumenz.java
package com.rumenz;
public class Rumenz extends SuperRumenz{private Integer id;private String name;@Overridepublic 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();}@Beanpublic Rumenz rumenz(){Rumenz rumenz = new Rumenz();rumenz.setId(123);rumenz.setName("入门小站");return rumenz;}@Beanpublic 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

Spring集合类型依赖查找相关推荐

  1. Spring单一类型依赖查找Bean

    单一类型依赖查找接口 - BeanFactory BeanFacotry是spring中比较原始的Factory,BeanFactory是个Factory,也就是IOC容器或对象工厂 根据Bean名称 ...

  2. Spring集合类型属性注入

    作用:主要用于框架整合配置. Java.utils包中常用集合 (1)List (2)Set (3)Map (4)Properties Spring为集合提供了对应的标签: <list> ...

  3. SpringIoc依赖查找-5

    1. 依赖查找的今世前生: Spring IoC容器从Java标准中学到了什么? 单一类型依赖查找 JNDI - javax.naming.Context#lookup(javax.naming.Na ...

  4. Java J2EE中的依赖查找

    个人看法:设计依赖查找的设计模式,是为了解耦. 单一类型依赖查找 JNDI javax.naming.Context#lookup JavaBeans java.beans.beancontext.B ...

  5. Spring依赖查找中的常见异常

    文章目录 BeansException的子接口 NoSuchBeanDefinitionException不存在要查找的Bean NoUniqueBeanDefinitionException 容器中 ...

  6. spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入

    spring中的依赖注入 依赖注入: Dependency Injection IOC的作用:降低程序间的耦合(依赖关系) 依赖关系的管理:以后都交给spring来维护.在当前类需要用到其他类的对象, ...

  7. 依赖注入的三种方式_一起学Spring之三种注入方式及集合类型注入

    本文主要讲解Spring开发中三种不同的注入方式,以及集合数据类型的注入,仅供学习分享使用,如有不足之处,还请指正. 概述 Spring的注入方式一共有三种,如下所示: 通过set属性进行注入,即通过 ...

  8. Spring 延迟依赖查找Bean

    Bean 延迟依赖查找接口 // 一个对象工厂 public interface ObjectFactory<T> {// 返回一个对象T getObject() throws Beans ...

  9. (转)Spring如何装配各种集合类型的属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52858499 在前面我们已经会注入基本类型对象和其他bean,现在我们就来学习如何注入各种集合 ...

最新文章

  1. oracle数据库 export,转:Oracle数据库的备份方法——使用export作为备份
  2. 怎样能做好百度竞价推广?不妨参考下这篇竞价推广的日常工作流程
  3. Spring MVC POST中文乱码解决方案
  4. python电脑安装-如何安装python
  5. python窗口程序-窗口程序python
  6. 【Android应用开发】Android Studio - MAC 版 - 快捷键详解
  7. 还在为快捷键烦恼吗?IntelliJ IDEA 快捷键大全 Mac 版
  8. android studio yasea,yasea: RTMP streaming client for Android.
  9. 马斯克公布柏林超级工厂航拍 白雪皑皑仍在施工
  10. 火山引擎战略初现,字节跳动打造To B服务双引擎?
  11. 面试中软性问题的套路与反套路
  12. python2 与 python3的区别
  13. php上证指数抽奖代码,[高手指点] 美团网的抽奖是什么原理?
  14. 【_ 記 】topjui 多文件上传 (代码)
  15. matlab冲激函数的傅里叶变换,信号与系统课件14.ppt
  16. AirSim中的物理引擎
  17. 方程检验格式图片_eviews的异方差检验ppt课件
  18. 全局变量、函数原型和Guard macro
  19. VMware : 处理器数量和每个处理器的核心数量
  20. cocos2d 高仿doodle jump 无源代码

热门文章

  1. 地址管理和子网划分基础
  2. H3C SecPath F100-C 防火墙默认配置
  3. udp linux 获取本机ip
  4. [Java] 蓝桥杯ADV-178 算法提高 简单加法
  5. [Python] L1-051 打折-PAT团体程序设计天梯赛GPLT
  6. 蓝桥杯 ADV-82 算法提高 填充蛋糕
  7. Python出现quot; SyntaxError: Non-ASCII character '\xe6' 或'\xd6' in filequot;错误解决方法
  8. MyBatis中Like语句使用方式
  9. Java任务调度框架Quartz教程实例
  10. Jarvis Oj Pwn 学习笔记-level4