spring annotation 注入的问题

在使用annotation注入的时候,如果被注入的对象的class是继承了某个基类,则会 有如下异常 Unable to instantiate Action, org.****.base.security.web.action.UserAction, defined for 'user' in namespace '/security'Error creating bean with name 'org.****.base.security.web.action.UserAction': Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.****.base.security.web.action.UserAction.setService(org.****.base.security.service.UserService); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.****.base.security.service.UserService] is defined: Unsatisfied dependency of type [class org.****.base.security.service.UserService]: expected at least 1 matching bean
代码如下:

@Namespace("/security")
@ParentPackage("default")
public class UserAction extends BusinessActionSuport {

@Autowired
public void setService(@Qualifier("userService")UserService service){
    this.userService = service;
}

...

}

@Service
@Transactional
public class UserService [color=red]implements BusinessService[/color]{
public List findAll() {
return userDao.findAll();
}

...

}

但是如果我把红色部分去掉,则运行正常,或者不去掉红色部分,把注入部分改为如下,也可以运行正常,这是为啥呢?
@Autowired
public void setService(@Qualifier("userService")BusinessService service){
this.userService = service;
}

[b]问题补充:[/b]
谢谢Shine的回复,但是在实际操作中,我希望使用UserService,因为UserService比接口提供了更多的操作,有什么好办法吗?

我觉得你的BusinessService应该作为一个基类存在,而不是作为一个接口,BusinessService中定义了一些对象的基本操作,而你的操作应该放在IUserService中,或者让IUserService继承BusinessService
[code="java"]
public Interface IUserService extends BusinessService{
void login();
}
public class UserService implements IUserService{
}
[/code]

[code="java"]
public class UserAction extends BusinessActionSuport {

[color=red]private BusinessService service;[/color]
@Autowired
public void setService([color=red]BusinessService[/color] service){
this.userService = service;
}
[/code]
最好都使用接口类型,UserService在实现某个接口时,spring会认为该bean为接口类型,而你在setter方法中指定的为具体类型,spring在bean容器中无法为其匹配,所以建议都使用接口类型,不过最好还是通过@Resource或者@Qualifier方式指定具体bean