java - 为什么spring bean不仅可以支持String[]还可以支持String

标签 java spring spring-mvc annotations spring-bean

这是 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/

相关文章:

java - AsyncHttpClient:无法解析补丁 android

java - 在回收 View 中绘制直线和圆圈的最佳方法是什么?

Java:JScrollPane 覆盖 JFrame 光标设置,但仅在启动时

java - Spring 4 @Scheduled停止工作

java - Spring MVC 中的注解

java - 我可以使用 Cursor loader 而不是 asynctask 吗?

java - 异步不适用于 Controller 的抽象父类(super class)方法

multithreading - 在 Spring 中停止线程

java - Spring MVC 绑定(bind)到错误的字段

java - 将excel读入java - 如何简化