Spring配置中的id和name的区别

用到的Student类


public class Student {
    private String name;
    public void setName(String name){
        this.name=name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}

一、配置bean的时候,可以不设置id,也可以不设置name,Spring会默认的使用类的全限定名作为bean的唯一标识符。

<bean class="com.SEVEN.IDNAME.Student">
   <property name="name" value="张五月"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
   //当配置bean时候没有指定id和name时,spring默认使用类的全限定名作为bean的唯一标识符
Student student = (Student)ctx.getBean(Student.class.getCanonicalName());
System.out.println(student);

   输出:Student{name='张五月'}

二、如果配置bean时,只设置了id属性,那么id就是作为bean的唯一标识符,且id在spring容器中必须唯一。

<bean id="student1" class="com.SEVEN.IDNAME.Student">
     <property name="name" value="SEVEN"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
Student student1 = (Student)ctx.getBean("student1");
System.out.println(student1);

   输出:Student{name='SEVEN'}

三、如果配置bean时,没有设置id属性,只设置了name属性,那么name属性就是作为bean的唯一标识符,且name的值在spring容器中必须唯一。

<bean name="student2" class="com.SEVEN.IDNAME.Student">
   <property name="name" value="张七月"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
Student student2 = (Student)ctx.getBean("student2");
System.out.println(student2);

   输出:Student{name='张七月'}

四、如果同时设置了id和name属性,那么id设置的即为唯一标识符,name设置的是别名。

<bean id="student3" name="student33" class="com.SEVEN.IDNAME.Student">
   <property name="name" value="张八月"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
Student student3 = (Student)ctx.getBean("student3");
System.out.println(student3);
String[] student3name = ctx.getAliases("student3");
System.out.println("student3的别名为:");
for(String s:student3name)
{
   System.out.println(s);
}

  输出:

    Student{name='张八月'}
    student3的别名为:
    student33

五、如果同时设置了id和name属性,并且id和name的值相同,spring容器会自动检测并消除冲突,这个bean就只会有标识符,而没有别名。

<bean id="student4" name="student4" class="com.SEVEN.IDNAME.Student">
   <property name="name" value="张九月"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
Student student4 = (Student)ctx.getBean("student4");
System.out.println(student4);
String[] student4name = ctx.getAliases("student4");
System.out.println("student4的别名个数为:"+student4name.length);

  输出:

    Student{name='张九月'}
    student4的别名个数为:0

六、如果没有设置id,而name属性设置了多个值,那么name的第一个值会被用作标识符,其他的值被视为别名。如果设置了id,那么name的所有值都是别名。

<bean  name="student5 student6 student7 student8" class="com.SEVEN.IDNAME.Student">
   <property name="name" value="张十月"></property>
</bean>
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
Student student5 = (Student)ctx.getBean("student5");
System.out.println(student4);
String[] student5name = ctx.getAliases("student5");
System.out.println("student5的别名为:");
for(String s:student5name)
{
   System.out.println(s);
}
System.out.println("student5的别名个数为:"+student5name.length);

   输出:

     Student{name='张九月'}
     student5的别名为:
     student6
     student8
     student7
     student5的别名个数为:3 

 

注意:

(1)不管是标识符,还是别名,在容器中必需唯一。因为标识符和别名,都是可以用来获取bean的,如果不唯一,显然不知道获取的到底是哪一个bean。

(2)标识符和别名没有任何区别,id和name属性唯一的差别在于:id只能设置一个值,而name可以设置多个值。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值