对于service接口有多个实现问题

当service有多个接口时,如果用

@Autowired 
	private TestService service;

    就会报异常,告诉我们 他的实现只能有一个

1.第一种办法:使用 @Resource 注解(推荐)

  这里就要讲一下@Resource 和 @Autowired的区别

 @Autowired 是根据类型注入,也就是从spring bean工厂中找到实现 TestService接口的类,如果找到多个,当然就注入不成功了

@Resource 是先根据名称注入,找不到在根据类型注入,根据名称注入,就是在spring bean工厂中找类名为server的类进行注入这里service就是上面我们定义的名称。这样就不会找到多个了。如果我们的实现类Test1Serviceimpl,那么我们的名称就是test1Serviceimpl,这里名称要和类名保持一致,不然找不到.

2.第二种:通过new 具体实现类的方式

但是通过new的方式,那么dao层就不能通过注入的形式得到了,因为service不在spring 的bean工厂中。那么到也就只能手动从工厂中或取。

代码如下:

创建这个工具类

@Component
public class SpringBeanUtils implements ApplicationContextAware {
 
	private static ApplicationContext applicationContext;
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		SpringBeanUtils.applicationContext=applicationContext;
	}
	
	public static Object getBean(String name) {
		return applicationContext.getBean(name);
	}
	
	public static T getBean(String name,Class requiredType){
		return applicationContext.getBean(name, requiredType);
	}
}

如果是springMVC项目在spring.xml添加

<bean id="springBeanUtils" class="com.dnkj.nms.util.SpringBeanUtils"/>

然后获取dao的方法修改一下,这里还需要注意,原先用的@service注解要去掉

//原先是这样写的
@Autowired
	private test1 test;
//改为
private test1 test=(test1) SpringBeanUtils.getBean("test1");

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值