Spring中注解@Resource、@Autowired、@Inject三种依赖注入的区别

@Resource

此注解是JSR250中的注解,java规范里的,即使脱离了Spring在其他实现了这个规范的框架中也可以使用;

@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。

@Resource有两个重要属性,分别是name和type

  • name:可以指定要装配的组件id
  • type:  可以指定要装配的组件类型

@Resource注解并不支持与@Qualifier,@Primary组合使用

@Autowired

默认优先按照类型去容器中找对应的组件类型,找到就进行装配;如果找到多个相同类型的组件则再将属性的名称作为组件的id去容器中查找;

@Autowired注解有一个required属性默认为true,如果required=true的情况下,如果没有从容器中找到对应组件则会抛出异常,而required=false的情况下,没有找到对应组件则会返回null值

可以与 @Qualifier注解 和 @Primary注解 组合使用

  • @Qualifier:自动装配时,此注解可以在字段或参数上用作候选 bean 的限定符。 它还可以用于注释其他自定义注释,然后可以将其用作限定符。
  • @Primary:让Spring进行自动装配的时候,默认使用首选的bean;也可以继续使用@Qualifier指定需要装配的bean的id

@Inject

此注解是JSR330中的注解,使用时需要导入依赖;与@Resource和@Autowired功能大致相同;

而@Inject注解和@Autowired一样可以支持@Primary注解同时使用,而Inject没有required属性;

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