在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享。
1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的。总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab "等都是不规范的,Spring在初始化时就会报错,诸如:
Java代码
- org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.
2.name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如"a b"," abc",,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误: Java代码
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined
3.配置文件中不允许出现两个id相同的<bean>,否则在初始化时即会报错,如: Java代码
- 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代码
- <bean class="com.stamen.BeanLifeCycleImpl"/>
- <bean class="com.stamen.BeanLifeCycleImpl"/>
- <bean class="com.stamen.BeanLifeCycleImpl"/>
则第一个bean通过getBean("com.stamen.BeanLifeCycleImpl")获得, 第二个bean通过getBean("com.stamen.BeanLifeCycleImpl#1")获得, 第三个bean通过getBean("com.stamen.BeanLifeCycleImpl#2")获得,以此类推
分享到:
相关推荐
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>org.gjt.mm.mysql.Driver</value> </property> <property...
在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...
<bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="myJobTrigger" /> ...
本文将深入探讨如何在Spring中通过XML配置文件对Bean进行值的注入,包括List、Set和Map等集合类型的注入。 首先,我们需要了解Spring Bean的定义。在Spring中,Bean是一个被Spring容器管理的对象,它可以通过XML、...
<property name="beanNames"> <!-- 下面是所有需要自动创建事务代理的bean--> <list> <value>userManager</value> </list> <!-- 此处可增加其他需要自动创建事务代理的bean--> </property> <!...
在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!-- 单realm应用。如果有多个realm,使用‘realms’属性代替 --> <property name="realm" ref=...
<bean id="cacheProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="interceptorNames"> <list> <value>cacheBeforeAdvice</value> <value>cacheAfterAdvice</...
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven ...
这使得开发人员能够在一个文件中定义和配置多个Bean,从而简化了应用程序的配置过程。 #### `<bean>` 元素 `<bean>`元素用于告诉Spring容器一个类及其配置方式。它包含了以下关键属性: - **class属性**:表示...
- `<property name="dataSource"><ref bean="dataSource"/></property>`:将 `dataSource` 注入到 `sessionFactory` 中。 - `<property name="mappingResources"><list><value>com/alonely/vo/User.hbm.xml</value...
<bean id="defaultHost" class="org.restlet.ext.spring.SpringHost"> <property name="defaultComponent" ref="defaultComponent" /> </bean> <bean id="defaultComponent" class="org.restlet.Component"> ...
最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 <bean id="sqlMapClient" class="org.spring...
<bean id="sayHelloJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.test.Test</value> </property> </bean> <!-- 关键在如下两个触发器的...
在Spring配置文件(如`beans.xml`)中,你可以使用`<list>`、`<set>`、`<map>`和`<props>`标签来声明这些集合。每个标签都有自己的特定用途: 1. `<list>`:用于创建ArrayList实例,其内部元素可以是其他Bean或简单...
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <!-- 配置映射文件 --> <property ...
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" />...
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="mappingResources"> ...
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ... xmlns:p=... <bean id="u1" class="cn.sxt.vo.User" c:name="Lynn" c:age="18"/> </beans>
<bean id="timerJob" class="job.TimerJob"> </bean> <bean id="timerJobProxy" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="target...