spring注解问题,spring是怎么知道往这个接口里注入实现类别对象的?

abcbuzhiming 2013-05-23 11:49:45
以前用xml做配置的时候,因为spring的bean配置有属性字段,看的很清晰,最近开始学习用注解配置,结果开始搞不明白原理了,示例如下
有一接口
public interface GameInfoService {}

有一实现了它的类

@Service
public class GameInfoServiceImpl implements GameInfoService {}

然后在另外一个类别里,有一个GameInfoService 对象
@Component("gameInfoAction")
public class GameInfoAction extends ActionSupport {

private GameInfoService gameInfoService;

@Resource
public void setGameInfoService(GameInfoService gameInfoService) {
this.gameInfoService = gameInfoService;
}
}

然后在实际运行中,通过测试得知,GameInfoAction 内部的gameInfoService接口实际上被注入了GameInfoServiceImpl对象

我的疑问是,为啥呢,这里的规则是什么,spring为啥会确定这里应该注入GameInfoServiceImpl对象,就因为GameInfoServiceImpl是唯一实现了gameInfoService接口的类别吗?如果实现了gameInfoService接口的类别不止一个,该用什么方法标示注入哪一个?
...全文
2032 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolking2050 2013-09-25
  • 打赏
  • 举报
回复 1
如果用多个就用另外一个注解@Qualifier,如: @Autowired @Qualifier("appServiceImpl") private AppService appService;
cherish0125 2013-05-23
  • 打赏
  • 举报
回复
我从没用过注解。刚刚网上搜索了注入规则。 @Resource应用在setter上(应用到属性),则注入规则是: a.先使用属性名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败 b.如果属性名字没有匹配到Bean则spring会尝试采用属性参数类型匹配,如果找打bean则注入,如果属性参数类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个 bean的异常.注入失败. 如果intefaces 有多个实现,且自己不指定具体哪个实现,就会报错。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧