`
ducaijun
  • 浏览: 156876 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring配置<bean>中id和name的区别

阅读更多

在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享。 
 

1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的。总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab "等都是不规范的,Spring在初始化时就会报错,诸如: 
  Java代码  收藏代码

  1. org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.  
  
  2.name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如"a b"," abc",,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误: 
 Java代码  收藏代码
  1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined  

  3.配置文件中不允许出现两个id相同的<bean>,否则在初始化时即会报错,如: 
 Java代码  收藏代码
  1. org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.  

 

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

  5.name属性可以用,隔开指定多个名字,如<bean name="b1,b2,b3">,相当于多个别名,这时通过getBean("a1") getBean("a2") getBean("a3")返回的都是同一个实例(假设是singleton的情况) 
  
   6.如果id和name都没有指定,则用类全名作为name,如<bean class="com.stamen.BeanLifeCycleImpl">,则你可以通过 
   getBean("com.stamen.BeanLifeCycleImpl")返回该实例。 

  7.如果存在多个id和name都没有指定,且实例类都一样的<bean>,如: 
  Java代码  收藏代码

  1. <bean class="com.stamen.BeanLifeCycleImpl"/>  
  2.    <bean class="com.stamen.BeanLifeCycleImpl"/>  
  3.    <bean class="com.stamen.BeanLifeCycleImpl"/>  
     则第一个bean通过getBean("com.stamen.BeanLifeCycleImpl")获得, 
     第二个bean通过getBean("com.stamen.BeanLifeCycleImpl#1")获得, 
     第三个bean通过getBean("com.stamen.BeanLifeCycleImpl#2")获得,以此类推
分享到:
评论

相关推荐

    spring Ioc容器配置

    &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt; &lt;property name="driverClassName"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt; &lt;/property&gt; &lt;property...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    Spring3.2.4+Quartz2.2.0 Demo

    &lt;bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;property name="triggers"&gt; &lt;list&gt; &lt;ref bean="myJobTrigger" /&gt; ...

    Spring (bean怎样注入值)学习实例

    本文将深入探讨如何在Spring中通过XML配置文件对Bean进行值的注入,包括List、Set和Map等集合类型的注入。 首先,我们需要了解Spring Bean的定义。在Spring中,Bean是一个被Spring容器管理的对象,它可以通过XML、...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    &lt;property name="beanNames"&gt; &lt;!-- 下面是所有需要自动创建事务代理的bean--&gt; &lt;list&gt; &lt;value&gt;userManager&lt;/value&gt; &lt;/list&gt; &lt;!-- 此处可增加其他需要自动创建事务代理的bean--&gt; &lt;/property&gt; &lt;!...

    SPRING:bean配置properties

    在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...

    简单配置 shiro + spring +springMVC+hibernate简单框架

    &lt;bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"&gt; &lt;!-- 单realm应用。如果有多个realm,使用‘realms’属性代替 --&gt; &lt;property name="realm" ref=...

    spring-xmemcached

    &lt;bean id="cacheProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;property name="interceptorNames"&gt; &lt;list&gt; &lt;value&gt;cacheBeforeAdvice&lt;/value&gt; &lt;value&gt;cacheAfterAdvice&lt;/...

    java8+tomcat8+struts2.5+spring4.3+hibernate5.2框架搭建详细过程

    &lt;bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"&gt; &lt;property name="sessionFactory" ref="sessionFactory"/&gt; &lt;/bean&gt; &lt;tx:annotation-driven ...

    spring bean 属性总结

    这使得开发人员能够在一个文件中定义和配置多个Bean,从而简化了应用程序的配置过程。 #### `&lt;bean&gt;` 元素 `&lt;bean&gt;`元素用于告诉Spring容器一个类及其配置方式。它包含了以下关键属性: - **class属性**:表示...

    详解Spring的配置文件

    - `&lt;property name="dataSource"&gt;&lt;ref bean="dataSource"/&gt;&lt;/property&gt;`:将 `dataSource` 注入到 `sessionFactory` 中。 - `&lt;property name="mappingResources"&gt;&lt;list&gt;&lt;value&gt;com/alonely/vo/User.hbm.xml&lt;/value...

    <Reslet1>:Reslet+Spring,配置简单web访问

    &lt;bean id="defaultHost" class="org.restlet.ext.spring.SpringHost"&gt; &lt;property name="defaultComponent" ref="defaultComponent" /&gt; &lt;/bean&gt; &lt;bean id="defaultComponent" class="org.restlet.Component"&gt; ...

    spring定时任务

    &lt;bean id="sayHelloJob" class="org.springframework.scheduling.quartz.JobDetailBean"&gt; &lt;property name="jobClass"&gt; &lt;value&gt;com.test.Test&lt;/value&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 关键在如下两个触发器的...

    Spring高版本对ibatis的支持

    最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 &lt;bean id="sqlMapClient" class="org.spring...

    基于Spring2.0的Collection配置使用例子

    在Spring配置文件(如`beans.xml`)中,你可以使用`&lt;list&gt;`、`&lt;set&gt;`、`&lt;map&gt;`和`&lt;props&gt;`标签来声明这些集合。每个标签都有自己的特定用途: 1. `&lt;list&gt;`:用于创建ArrayList实例,其内部元素可以是其他Bean或简单...

    spring所有配置文件详解

    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; &lt;property name="dataSource"&gt; &lt;ref bean="dataSource"/&gt; &lt;/property&gt; &lt;!-- 配置映射文件 --&gt; &lt;property ...

    spring+mybaits配置

    &lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt; &lt;property name="dataSource" ref="dataSource" /&gt; &lt;property name="configLocation" value="classpath:mybatis-config.xml" /&gt;...

    spring配置文件详解

    &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt; &lt;property name="dataSource"&gt; &lt;ref bean="dataSource"/&gt; &lt;/property&gt; &lt;property name="mappingResources"&gt; ...

    05spring4_di.rar

    &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" ... xmlns:p=... &lt;bean id="u1" class="cn.sxt.vo.User" c:name="Lynn" c:age="18"/&gt; &lt;/beans&gt;

    MethodInvokingJobDetailFactoryBean.java

    &lt;bean id="timerJob" class="job.TimerJob"&gt; &lt;/bean&gt; &lt;bean id="timerJobProxy" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt; &lt;property name="target...

Global site tag (gtag.js) - Google Analytics