Spring中 bean的id和name的区别

在网上找了很多的文章,感觉说的好像跟我实际测试的结果不一样。
我用的4.0版本

在spring容器管理的Bean中,必须仅且只有一个无重复的ID。
不是语法这样,是请做到这样,因为这样会省去很多麻烦,避免出现问题。

然后,之前有人说id不能用特殊字符,name可以用特殊字符,但是我测试之后是都可以用特殊字符,并且也能取到bean,例如下面这个例子,根据id是可以取到这个bean。

<bean class="cn.dengbin97.test.bean.Bean3" id="#@t" name="mybean3, #mybean3"></bean>

然后是id不能重复,name可以重复,
我测试的id和name都可以重复,后面定义的会覆盖掉前面的
这个是建立在不同配置文件的,同一个配置文件中不能重复

//配置文件1,先加载
<bean class="cn.dengbin97.test.bean.Bean3" id="bean5"></bean>
//配置文件2,后加载
<bean class="cn.dengbin97.test.bean.Bean5" id="bean5"></bean>

//运行结果 false true 因为配置文件2中的bean5覆盖了前面的
//若交换加载顺序,则结果也会反过来
ApplicationContext ap = new 
ClassPathXmlApplicationContext("classpath:/applicationContext-service.xml", "classpath:/applicationContext-service2.xml");
        Object bean = ap.getBean("bean5");
        System.out.println(bean instanceof Bean3);
        System.out.println(bean instanceof Bean5);

然后如果配置是扫描包,加上了@Service或者@Controller等注解
会默认给上一个id ,类名首字母小写
不知道这个的优先级是不是低于配置文件,不管配置文件中扫描包和定义bean的顺序怎样的,最后都是扫描包被覆盖掉。

然后如果像下面这样写,会自动给个id,也就是全类名cn.dengbin97.test.bean.Bean3

<bean class="cn.dengbin97.test.bean.Bean3"></bean>

有人说只指定id或者只指定name,那么他们2个相等。。我不知道怎么测试

猜你喜欢

转载自blog.csdn.net/a1065712890/article/details/79893282