@setter上的@Autowired与@Required

问题描述

@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则将抛出该字段。

解决方法

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

class MyClass {
   @Autowired
   MyService myService;
}

和这样的代码:

class MyClass {
   MyService myService;

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”