java框架接口案例_Spring获取实现某接口的所有实例bean

1、获取 applicationContext,通过ApplicationAware自动注入

2、getBeansOfType、getBeanNamesForType

//key位 beanName,value为bean

Map result = applicationContext().getBeansOfType(Interface.class);

//返回 beanName 的String 数组

String[] result = applicationContext().getBeanNamesForType(Interface.class);

注:这种方法除了可以获取实现【接口】的所有Bean,也可以获取所有继承【抽象类/类】的所有Bean,如下

Map result = applicationContext().getBeansOfType(AbstractObject.class);

String[] result1 = SpringContextUtils.getApplicationContext().getBeanNamesForType(Action.class);

Map result2 = SpringContextUtils.getApplicationContext().getBeansOfType(Action.class);

logger.info(Arrays.toString(result1));

logger.info(result2.toString());

2021-01-14 01:01:51.733 INFO [http-nio-8080-exec-1]com.imddysc.study.sqlmonitor.controller.TestController.test01:28 -[emailAction, logAction, msgAction, msxfAction, noAction, wechatAction]

2021-01-14 01:01:51.733 INFO [http-nio-8080-exec-1]com.imddysc.study.sqlmonitor.controller.TestController.test01:29 -{emailAction=com.imddysc.study.sqlmonitor.action.EmailAction@6608db67, logAction=com.imddysc.study.sqlmonitor.action.LogAction@7e7a8006, msgAction=com.imddysc.study.sqlmonitor.action.MsgAction@1e67cafc, msxfAction=com.imddysc.study.sqlmonitor.action.MsxfAction@2fd03079, noAction=com.imddysc.study.sqlmonitor.action.NoAction@fa30507, wechatAction=com.imddysc.study.sqlmonitor.action.WechatAction@2573de45}

根据不同参数,调用不同Service完成不同功能的案例

String str = "msg";

Action action = null;

if("msg".equals(str)) {

action = (Action) SpringContextUtils.getBean("msgAction");

}else if ("wechat".equals(str)) {

action = (Action) SpringContextUtils.getBean("wechatAction");

}else if ("email".equals(str)) {

action = (Action) SpringContextUtils.getBean("emailAction");

}

action.doAction();

return "1";

补充:java通过Class的isAssignableFrom方法

注释:【a.isAssignableFrom(b)】有两个Class类型的类象,一个是调用isAssignableFrom方法的类对象(对象a),以及方法中作为参数的这个类对象(对象b),这两个对象如果满足以下条件则返回true,否则返回false:

a对象所对应类信息是b对象所对应的类信息的父类或者是父接口,简单理解即a是b的父类或接口

a对象所对应类信息与b对象所对应的类信息相同,简单理解即a和b为同一个类或同一个接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值