有什么区别@Inject
and @Resource
and @Autowired
注释?
我们什么时候应该使用它们?
@Inject、@Autowire、@Resource 之间的区别?
@自动连线:spring propriety 注解(与 @Inject 和 @Resource 相反)按类型注入资源,即通过带注释的字段或承包商的接口的类。如果我们几乎没有接口或子类的实现,我们可以使用 @Qualifier 注释来缩小选择范围以避免歧义。对于后备匹配,bean 名称被视为默认限定符值。尽管您可以使用此约定按名称引用特定的 bean,但 @Autowired 从根本上讲是关于带有可选语义限定符的类型驱动注入。
@Inject:基于 JSR-330(Java 依赖注入)的注释标识可注入的构造函数、方法和字段。该注释几乎完全替代了 Spring 的 @Autowired 注释。因此,您可以选择使用 @Inject,而不是使用 Spring 特定的 @Autowired 注释。 @Autowired 和 @Inject 之间的区别之一是 @Inject 没有必需的字段,因此如果我们找不到合适的对象来注入,它将失败,而 @Autowired 可以使用 required=false 并允许可为空的字段(仅如果需要的话!)。
@Inject 注解的优点是,您可以要求 @Inject 注入 Provider,而不是直接注入引用。除其他功能外,Provider 接口还支持 bean 引用的延迟注入和 bean 的多个实例的注入。
如果我们几乎没有接口或子类的实现,我们可以使用 @Named 注释来缩小选择范围以避免歧义。 @Named 注解的工作方式很像 Spring 的 @Qualifier
@资源:基于 JSR-250 的注释。 @Resource 与 @Autowired 和 @Inject 非常相似,但主要区别在于查找要注入的所需 bean 所采用的执行路径。 @Resource 将首先按名称缩小搜索范围,然后按类型,最后按限定符缩小搜索范围(如果按名称找到匹配项,则忽略)。 @Autowired 和 @Inject 将首先按类型缩小搜索范围,然后按限定符,最后按名称缩小搜索范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)