Spring—依赖注入注解
@Autowired 属于 Spring 内置的注解,默认根据类型进行注入,也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类)。
- 当一个接口存在多个实现类的话,byType这种方式就无法正确注入对象了,因为这个时候 Spring 会同时找到多个满足条件的选择,默认情况下它自己不知道选择哪一个。
- 这时候可以通过@Qualifier指定名称(实现类的小驼峰命名),或者根据变量名自动根据名字匹配。推荐前者方式
@Resource属于 JDK 提供的注解,默认注入方式为 byName。如果无法通过名称匹配到对应的 Bean 的话,注入方式会变为byType
- @Resource有两个属性,name和type,如果仅指定 name 属性则注入方式为byName,如果仅指定type属性则注入方式为byType,如果同时指定name 和type属性(不建议这么做)则注入方式为byType+byName
@Autowired 支持在构造函数、方法、字段和参数上使用。@Resource 主要用于字段和方法上的注入,不支持在构造函数或参数上使用。
@Autowired是Spring官方的注解,@Resource是JDK的注解,更像是一个标准或者约定,所有的IOC容器都支持这个注解
@Autowired如果找不到Bean会抛异常,@Resource如果找不到Bean就是null,不会有异常