@Autowired
和 @Resource
都是 Spring 框架中用来实现依赖注入(DI)的注解,但它们不完全相同。
@Autowired
注解用于指示要自动装配一个bean到Spring管理的Bean(例如Spring Bean),如果有多个Bean类型与所需类型匹配,则可以通过添加限定符或名称限制bean的选择。默认情况下,这对于查找符合所需接口或类的唯一可用bean是很有用的。除非您使用更高级别的组件扫描机制如<context:component-scan>
,否则 bean 必须明确定义并注册在容器中。因此,@Autowirecd
是根据类型进行注入。
另一方面,@Resource
可以分为两种:按名称和按类型,默认情况下按"name"属性将寻找具有给定名称的 bean,并且只有当没有其他任何具有该名称时方才标识该位置。第二个形式按照认证信息搜索具有适当类型的bean。资源注释还可以从bean工厂外部参考其他媒体上定义的某些东西。 @Resource
也支持可选 “name” 属性、必需的 “type” 属性和描述性 “description” 属性。
总之,虽然这两个注释都可以显着减少Java代码中的麻烦,但除了这个外,它们所代表的实际行为是非常不同的。@Autowired
是根据类型进行注入,而 @Resource
则是根据名称或类型进行注入。