【问题标题】:Why spring bean can support not only String[] but also String为什么spring bean不仅可以支持String[]还可以支持String
【发布时间】:2017-10-24 07:23:53
【问题描述】:

这是 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();
}

【问题讨论】:

    标签: java spring spring-mvc annotations spring-bean


    【解决方案1】:

    您可以在数组中放置 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();
    }
    

    实际上,您将 String "user" 放入方法返回的字符串数组中:

    String[] value() default {};
    

    这就是为什么"user" 被接受的原因,因为它只是一个字符串

    【讨论】:

    • 但在@Bean("user") 中,"user" 不是数组。 java可以支持吗?
    • 我想你误解了什么是 Java 中的数组。在这里查看:alvinalexander.com/java/…
    • 你明白为什么"user"在这种情况下被接受了吗?
    • 对不起,我还是不明白。你能帮帮我吗?
    • 请检查编辑,我试图解释为什么"user"被接受。
    【解决方案2】:

    这和Java中的main方法的概念是一样的。

    public static void main(String[] args)

    你可以调用你的 main 方法,不传递参数,一个、两个或你想要多少。

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2017-11-22
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2019-07-04
      • 1970-01-01
      相关资源
      最近更新 更多