请简述@Autowired和@Resource之间的区别 ?
参考答案:
@Autowired
和 @Resource
都是 Spring 框架中用于自动装配 bean 的注解,但是它们之间有一些重要的区别。
-
来源不同:
@Autowired
是 Spring 框架提供的注解,从 Spring 2.5 版本开始引入。@Resource
是来自于 JSR 250 规范,是 Java 标准的一部分,从 Java EE 5 开始提供。
-
注入方式不同:
@Autowired
是按类型(byType)进行注入的,Spring 容器会根据需要注入的字段、方法或构造函数的参数类型来查找匹配的 bean。如果找到多个匹配的 bean,Spring 会根据 bean 的名称或@Qualifier
注解进行区分。@Resource
既可以按类型(byType)注入,也可以按名称(byName)注入。默认情况下,它会先尝试按名称进行注入,如果找不到匹配的 bean,再尝试按类型进行注入。在@Resource
注解中,可以通过name
属性指定 bean 的名称,通过type
属性指定 bean 的类型。
-
是否支持 null 值:
@Autowired
注解的字段、方法或构造函数如果没有找到匹配的 bean,Spring 会抛出一个异常。但是,可以通过设置required
属性为false
来改变这个行为,使得在没有找到匹配的 bean 时不会抛出异常,而是将字段、方法或构造函数的参数设置为 null。@Resource
注解的字段、方法或构造函数如果没有找到匹配的 bean,默认情况下会将字段、方法或构造函数的参数设置为 null。但是,也可以通过设置required
属性为true
来改变这个行为,使得在没有找到匹配的 bean 时抛出一个异常。
总的来说,@Autowired
和 @Resource
都是用于实现依赖注入的注解,但是它们在来源、注入方式和是否支持 null 值等方面有所不同。在选择使用哪个注解时,应该根据具体的需求和场景来决定。