Spring注解布尔字段设置:为何@Autowired(false)错误而@Lazy(false)正确?
为什么@Autowired(false)写法错误,而@Lazy(false)写法正确?
这是由Java注解的语法规则决定的,核心看注解参数的名称:
- 当注解**只有一个参数,且参数名为
value**时,使用注解可以省略参数名,直接传入参数值,这是Java提供的语法糖。 - 如果注解的参数名不是
value,哪怕只有一个参数,也必须显式指定参数名,不能直接写值。
对应到你提到的两个Spring注解:
@Autowired注解
它的定义里唯一参数是required,不是value:public @interface Autowired { boolean required() default true; }所以必须显式指定参数名,写成
@Autowired(required=false),直接写@Autowired(false)会编译报错——Java无法识别这个值对应哪个参数。@Lazy注解
它的定义里唯一参数是value:public @interface Lazy { boolean value() default true; }符合Java注解的简写规则,因此既可以写完整形式
@Lazy(value=false),也可以省略参数名写成@Lazy(false),两种写法都合法。
内容的提问来源于stack exchange,提问作者Abe
相关产品推荐
相关产品推荐

