这是 Spring bean 源。
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {};
@AliasFor("value")
String[] name() default {};
Autowire autowire() default Autowire.NO;
String initMethod() default "";
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
我注意到String[] value() default {};
。这意味着我们必须使用字符串数组。但我使用下面的代码,在那里传递了一个字符串,它仍然有效,请告诉我为什么。
@Bean("user")
public UserBean get() {
return new UserBean();
}
最佳答案
在数组中,您可以放置 0 个或多个值,这取决于您。这仅仅意味着您可以为您的 bean 指定 0 个或多个别名。
@Bean(value={"user","otherUser","..."})
public UserBean get() {
return new UserBean();
}
编辑
为什么“user”
即使不是数组也会被接受?
所以,在 Java 中你可以像这样声明一个 String 对象:
String value = "value1"; //this is a String
String user = "user"; // this is another String
String str = ""; //this is an empty string
请注意,它们是用 ""
定义的,因此 "user"
是一个字符串。
现在,在这种情况下,如果有一个字符串数组,则意味着我们有一个作为字符串容器的对象。
String[] values=new String[]{};//this is an array of String, an object where we can put many Strings.
由于“user”
是一个字符串,您可以将其放入数组values
中,如下所示:
values[0]="user";
当你像这样声明你的bean时:
@Bean("user")
public UserBean get() {
return new UserBean();
}
实际上,您将字符串 "user"
放入该方法返回的字符串数组中:
String[] value() default {};
这就是为什么“user”
被接受,因为它只是一个字符串
关于java - 为什么spring bean不仅可以支持String[]还可以支持String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46904548/