从 Spring 容器取 Service Bean 报错

28 篇文章 0 订阅
9 篇文章 1 订阅

昨天想写个测试,发现取不到 sevice 的 bean。原因是要取接口class而非实现类class

提个基类,方便从容器取 bean

package com.jerryjin.mapper;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import junit.framework.TestCase;

/**
 * 为了取 bean 方便提个基类。
 */
public class BaseTest extends TestCase {
	//初始化上下文;
	protected static ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
	//按类型提取 getBean("jerryUserService");
    public <T> T getBean(Class<T> requiredType) {
    	return context.getBean(requiredType);
    }
    //按别名取 getBean(IJerryUserService.calss); 注意按class取Service要用接口
    public Object getBean(String requiredType) {
    	return context.getBean(requiredType);
    }
	
}

正例:

  • 用别名
public class JerryUserServiceTest extends BaseTest {
	public void testBuildUserName() {
		IWeChatUserService weChatUserService = (IWeChatUserService)getBean("weChatUserService");
		System.out.println(weChatUserService.buildUserName());
	}
}
  • 用class
    要用接口的class
public class JerryUserServiceTest extends BaseTest {
	public void testBuildUserName() {
		IWeChatUserService weChatUserService = (IWeChatUserService)getBean(IWeChatUserService.class);
		System.out.println(weChatUserService.buildUserName());
	}
}

反例:

  • 用class
    直接用实现类的class 会报错
public class JerryUserServiceTest extends BaseTest {
	public void testBuildUserName() {
		IWeChatUserService weChatUserService = (IWeChatUserService)getBean(WeChatUserService.class);
		System.out.println(weChatUserService.buildUserName());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值