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

@setter上的@Autowired与@Required

甘永春
2023-03-14
问题内容

我很好奇知道这样的代码之间有什么区别:

class MyClass {
   @Autowired
   MyService myService;
}

和这样的代码:

class MyClass {
   MyService myService;

   @Required
   public void setMyService(MyService val) {
       this.myService = val;
   }
}

问题答案:

@Autowired要自动装配Bean时使用注释。@Autowired不限于二传手。它也可以与构造函数和字段一起使用。如果@Autowired在字段上使用批注,则该字段将自动与具有匹配数据类型的bean连接。

@Required检查是否设置了特定属性。如果某个字段已使用@Required批注注释,并且未设置该字段,则将得到org.springframework.beans.factory.BeanInitializationException

编辑:如’kryger’所指出:用注释的字段@Autowired也是有效的@Required(除非您将其必需的参数显式设置为false)。例如:

@Autowired(required=false)
private ObjectType objectType;

对于已注释的字段@Autowired,如果具有匹配数据类型的bean不可用,org.springframework.beans.factory.BeanCreationException则将抛出该字段。



 类似资料:
  • 根据@autowiredjavadoc: 将构造函数、字段、setter方法或配置方法标记为由Spring的依赖项注入工具自动生成。任何给定bean类中只有一个构造函数(最大值)可以携带此注释,指示构造函数在用作Spring bean时自动连接。这样的构造函数不必是公共的。字段是在bean构造之后、调用任何配置方法之前注入的。这样的配置字段不必是公共的。配置方法可以有任意名称和任意数量的参数;每个

  • 问题内容: 我已经使用过JUnit,但是某些测试存在一些问题,这些测试在Spring bean内具有@Autowired批注,当我引用它们时,@ Autowired的bean始终为NULL。 这是示例代码: 当调用Manager对象时,Spring会生成代理,但是当访问@Autowired parameterManager时,该对象为null,并且由于这个问题,我无法测试此方法。 知道是什么原因造

  • 我使用JUnit,但有些测试有一些问题,这些测试在Spring bean中有@Autowired注释,当我引用它们时,@Autowired的bean总是为空。

  • 我刚刚看到一些示例,其中@Autowire用于非setter方法。 我怎么称呼这个方法?像对象eference.do东西();调用这些方法时不需要参数吗? 我们什么时候在非setter方法上使用@autowire 有人能分享一些相同的样品吗?

  • 我正在从 XML 转到注释。 我有界面类型的房子和我的,类类型的房子和我的。斯普林将一个“我的Impl”实例注入到“鼠标优化”实例中, 因此< code>HouseImpl中的属性称为< code>my2。 在Spring配置文件中, 如果配置是XML格式的,那么配置中有,并且没有注释,则注入bean ,因为属性名称是(是方法)。但是当我们使用注释bean 时,会被注入,因为的参数的名称是。 我的