为什么spring bean不仅支持String []而且还支持String

时间:2017-10-24 07:23:54

标签: 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 {};。这意味着我们必须使用String Array。但我使用下面的代码,在那里传递一个字符串,它仍然有效,请告诉我原因。

@Bean("user")
public UserBean get() {
    return new UserBean();
}

2 个答案:

答案 0 :(得分:2)

在数组中,您可以输入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数组,这意味着我们有一个对象是String的容器。

String[] values=new String[]{};//this is an array of String, an object where we can put many Strings.

由于"user"是一个String,你可以将它放在数组values中,如下所示:

values[0]="user"; 

当你宣布你这样的bean时:

@Bean("user")
public UserBean get() {
  return new UserBean();
}

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

String[] value() default {};

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

答案 1 :(得分:0)

这与Java中主要方法的概念相同。

echo sqlplus usr/pwd@wind < C:\temp\test.sql

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