当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");