获取spring context中bean,实现按需调用接口

背景

调用方传入一个json,按json中的api字段值去调用本系统中不同类去完成不同的功能。为了统一和可扩展,通过context中的bean的方式去转发。

实现

1、定义一个接口

public interface Req {
    public String process(String request);
}

2、所有实现类都implement该接口

@Component("joinReq")
public class JoinReq implements Req {
    @Override
    public String process(String request) {
        return "ok";
    }
}

3、实现ApplicationContextAware类,从context中getBean


@Component
public class SpringBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext; // Spring应用上下文环境

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringBeanUtil.applicationContext = applicationContext;
    }

    /**
     * 获取对象
     *
     * @param name
     * @return Object 一个以所给名字注册的bean的实例
     * @throws BeansException
     */
    public Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

}

注意:网上有很多方法去getBean,但是:

1)FileSystemXmlApplicationContext方式一定要指定xml文件,对于注解注入的无效

2)WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();这种方式自测是无效的,wac是null,原因待研究

所以最终还是采用上述方法

4、main类,用第3步生成的SpringBeanUtil来路由所需要的接口

Req req=(Req)springBeanUtil.getBean(api);
System.out.println(req.process(request));

当入参api="join"时,就能执行joinReq这个bean的process了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值