当前位置: 首页 > 面试题库 >

@Resource vs @Autowired

薄伟彦
2023-03-14
问题内容

我应该在DI中使用哪个批注@Resource(jsr250)@Autowired(特定于Spring)?

我已经成功地在过去使用两种,@Resource(name="blah")@Autowired @Qualifier("blah")

我的直觉是坚持使用该@Resource标签,因为它已被jsr人士批准。
有人对此有强烈的想法吗?


问题答案:

在3.0之前的spring中,哪一个都不重要。

在Spring 3.0中,支持标准(JSR-330)注释@javax.inject.Inject-将其与结合使用@Qualifier。请注意,spring现在还支持@javax.inject.Qualifier元注释:

@Qualifier
@Retention(RUNTIME)
public @interface YourQualifier {}

所以你可以有

<bean class="com.pkg.SomeBean">
   <qualifier type="YourQualifier"/>
</bean>

要么

@YourQualifier
@Component
public class SomeBean implements Foo { .. }

然后:

@Inject @YourQualifier private Foo foo;

这样就减少了字符串名称的使用,因为字符串名称可能会拼写错误并且难以维护。

至于原始问题:两者都未指定注释的任何属性,而是按类型执行注入。区别在于:

  • @Resource 允许你指定注入的bean的名称
  • @Autowired 允许你将其标记为非强制性。


 类似资料:
  • 问题内容: 我有一个使用自动装配的3个不同类的A类 在测试它们时,我只希望将其中两个类(B&C)作为模拟,并让D类在正常运行时可以自动装配,但此代码对我不起作用: 甚至有可能这样做吗? 问题答案: 应该是这样的 如果您不想成为别人,则无需在课堂上做任何事情。您 应具有的正确实例。此外,我认为你需要使用的工作,用正确的设定。因为您没有使用,所以需要使用 MockitoAnnotations.init

  • 问题内容: 我很好奇知道这样的代码之间有什么区别: 和这样的代码: 问题答案: 要自动装配Bean时使用注释。不限于二传手。它也可以与构造函数和字段一起使用。如果在字段上使用批注,则该字段将自动与具有匹配数据类型的bean连接。 检查是否设置了特定属性。如果某个字段已使用批注注释,并且未设置该字段,则将得到。 编辑:如’kryger’所指出:用注释的字段也是有效的(除非您将其必需的参数显式设置为f

  • 问题内容: 我正在使用Mockito 和批注将依赖项注入到使用Spring批注的私有字段中: 和 现在,我还要将 真实 对象注入私有字段(不使用setter)。这是否可能,或者该机制仅限于注入Mocks? 问题答案: 使用注释 Mockito将把具有或批注的所有字段视为要注入到带有批注的实例中的潜在候选对象。在上述情况下,实例将被注入到“演示”中 有关更多详细信息,请参阅 样板房 @间谍 @嘲笑

  • 问题内容: 我正在看工作区中的一些旧示例。由于没有 @Autowired, 我看不到自动 装配的方式 。Spring Boot + Facebook默认配置。 它工作完美,但是这些bean如何在没有@Autowired的情况下自动进行自动连线? 它们是作为字段或在构造函数中自动接线的吗? 问题答案: 借助Spring Boot 1.4+,构造函数将自动进行自动接线 https://docs.spr

  • 问题内容: 我的User对象的Jackson序列化遇到问题。有一些带有getter和setter的私有字段。当我做这样的事情时,一切工作正常: 但是我想用Spring Framework自动连接User对象: 这是行不通的。我有一个错误: 当我尝试忽略这些未知错误时 我得到了无限递归: 看起来Spring在自动装配MyUser实例上做错了什么,因此Jackson无法序列化它。 有办法解决吗? 更新

  • 问题内容: 我一直在开发一个gwt应用程序,该应用程序应该具有一个休息服务来访问数据库,包括它自己的数据库和其他远程数据库。我使用Spring来更好地使用数据库(objectdb),而不是在Jersey实习。这是给出问题的代码: User.java 客户.java CustomerDAO.java JpaDAO.java 最后是CustomerServiceImpl.java web.xml正确编

  • 问题内容: 我有一个组件安装程序,它实际上是一个应用程序的启动器。它的配置如下: MyService带有Spring注释,并自动连接到我的启动器类中,没有任何问题。 我想为MyLauncher编写一些jUnit测试用例,为此,我启动了一个这样的类: 我可以为MyService创建一个Mock对象,然后将其注入测试类中的myLauncher吗?由于Spring正在处理自动装配,因此我目前在myLau

  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的