Spring中 bean的id和name的区别
在网上找了很多的文章,感觉说的好像跟我实际测试的结果不一样。我用的4.0版本在spring容器管理的Bean中,必须仅且只有一个无重复的ID。不是语法这样,是请做到这样,因为这样会省去很多麻烦,避免出现问题。然后,之前有人说id不能用特殊字符,name可以用特殊字符,但是我测试之后是都可以用特殊字符,并且也能取到bean,例如下面这个例子,根据id是可以取到这个bean。<...
·
在网上找了很多的文章,感觉说的好像跟我实际测试的结果不一样。
我用的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个相等。。我不知道怎么测试
更多推荐
已为社区贡献1条内容
所有评论(0)