Spring配置中 bean 的id和name属性的区别

 我来答
百度网友017a620
2017-08-25 · TA获得超过803个赞
知道小有建树答主
回答量:692
采纳率:90%
帮助的人:141万
展开全部



简单的说:id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias,可以有多个,并可能与其他的bean重名。

详细的说:

id是唯一标识bean.不能用特殊字符:×#@ ,不能用数字开头。在bean引用的时候只能用id指向你需要的bean;

name 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”,用逗号隔开。
通过id和name都可以取出该Bean.

BeanFactory factory=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));  
    Dao dao=(Dao)factory.getBean("thisbean");  
    Dao dao1=(Dao)factory.getBean("bean1");  
    Dao dao2=(Dao)factory.getBean("bean2");     .........  
           // 验证是否指向同一个Bean   
              System.out.println((dao== dao1));   
              System.out.println((dao1== dao2));   
              // 输出bean的别名   
              String[] thisbean= factory.getAliases("thisbean");   
              for (String strbean: thisbean) {   
                  System.out.println(strbean);   
              }

配置文件中不允许出现两个id相同的,否则在初始化时即会报错;但配置文件中允许出现两个name相同的,在用getBean()返回实例时,后面一个Bean被返回,应该是前面那个被后面同名的 覆盖了。有鉴于此,为了避免不经意的同名覆盖的现象,尽量用id属性而不要用name属性。

如果id和name都没有指定,则用类全名作为name,如,则你可以通过
getBean("com.stamen.BeanLifeCycleImpl")返回该实例。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式