@Resource和@Autowired的一些理解

概述

Spring依赖注入中,大家都知道@Resource和@Autowired。明明@Resource即支持名字又支持类型,还要@Autowired干嘛?

二者的来源

@Resource 于 2006年5月11日随着JSR 250 发布:类似一个定义,可以由其他框架或者组件自由实现,并没有和spring强绑定

@Autowired 于 2007年11月19日随着Spring2.5发布:这是Spring的亲儿子

Spring为啥同时支持两个功能相似的注解

  • 它们的概念不同,@Resource更倾向于找已知资源,而Autowired倾向于尝试按类型搜索资源。

  • 方便其他框架迁移,@Resource是一种规范,只要符合JSR-250规范的其他框架,Spring就可以兼容。

既然@Resource更倾向于找已知资源,为什么也有按类型注入的功能?

猜测:可能是为了兼容从Spring切换到其他框架,其他的框架不一定有类似@AutoWired这种按类型注入的注解了。

使用场景

@Resource倾向于确定性的单一资源,@Autowired为类型去匹配符合此类型所有资源。

如集合注入,@Resource也是可以的,但是建议使用@Autowired。不建议使用@Resource注入集合资源,本质上集合注入不是单一,也是不确定性的。

你可能感兴趣的:(Spring,spring,java,spring,boot)