Spring 获取 实现某接口的所有实例bean

本文介绍了如何在Spring框架中利用ApplicationContext获取实现特定接口的所有bean实例。通过调用getBeansOfType方法,可以得到一个Map,其中key为bean名称,value为对应的实例。同时,也可以使用getBeanNamesForType方法获取实现接口的bean名称的String数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

首先,获取 applicationContext,通过ApplicationAware自动注入

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.core.io.Resource;import org.springframework.stereotype.Component;import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.Properties;/** * @ClassName: SpringBeanUtil * @Description: TODO(spring功能类,用于获取bean) * @author zhoushun * @date 2012-11-27 下午04:22:36 *  */@Component("springBeanUtil")public class SpringBeanUtil implements ApplicationContextAware protected final static Log logger = LogFactory.getLog(SpringBeanUtil.class); private static ApplicationContext ctx = nullprivate static Map<String, Properties> propMap = new HashMap<String, Properties>(   0); public void setApplicationContext(ApplicationContext ctx)   throws BeansException {  SpringBeanUtil.ctx = ctx; }    public static ApplicationContext getApplicationContext() {        return ctx;    }    public  static <T> T getBean(String prop) {        Object obj = ctx.getBean(prop);        if (logger.isDebugEnabled()) {            logger.debug("property=[" + prop + "],object=[" + obj + "]");        }        return (T)obj;    } public static Properties getProperties(String filepath) {  if (propMap.containsKey(filepath))   return propMap.get(filepath);  Resource resource = ctx.getResource(filepath);  Properties prop = new Properties();  try {   prop.load(resource.getInputStream());   propMap.put(filepath, prop);   return prop;  } catch (IOException e) {   logger     .error("can not find the resource file:[" + filepath + "]",       e);   return null;  } }}

使用:

Map<String, Interface> result = SpringBeanUtil.getApplicationContext().getBeansOfType(Interface.class);

key位 bean name,value为实例


String[] result = SpringBeanUtil.getApplicationContext().getBeanNamesForType(IPrizeInvoke.class);

返回 bean name 的String 数组


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值