快速上手Spring--5.Bean的标志符(id与name)

    技术2022-05-11  66

    快速上手Spring--5.Bean的标志符(id与name)<script language="javascript" type="text/javascript"> document.title="快速上手Spring--5.Bean的标志符(id与name) - "+document.title </script>   又重新学习了Spring,想把自己的心得写下来,感觉有些无从下手。想来想去,还是根据 Spring中文论坛翻译的 《Spring Framework 开发参考手册》(1.1版本的中文版,pdf格式),来组织自己的思路。在这个阶段,我发布的关于Spring的文章,基本上都是入门级别的。相对而言,对于新手的帮助应该会更大。      虽然当前Spring的版本已经是1.2.2了,但同1.1版本的中文版相比,spring-reference还是相差不大的(尤其是前面几章的基础部分),所以采用的还是1.1版本的开发参考手册。      这个系列的文章,我准备根据开发参考手册的讲解,有针对性的增加大量的比较简单的实例,每个实例尽量只解释一个问题。下面就从3.2.4小节——《Bean的标志符(id与name)》讲起。      相关软件的配置可以参考《 快速上手Spring--2.HelloWorld(1)》。      一般来说,在一个XmlBeanFactory中,定义一个bean时,采用的是<bean id="XX" class="XX">的样式,如<bean id="helloBean" class="javamxj.HelloBean">。 这里id的命名格式必须符合XML ID属性的命名规范,例如,不能以数字开头,“222”就不是合法的id值。为了解决这个问题,可以使用name属性指定一个和多个id(用逗号或者分号隔离)。       这里还是以HelloBean为例,这三个文件都放在包javamxj.spring.basic.aliases下。   · HelloBean  HelloBean.java package javamxj . spring . basic . aliases ; public class HelloBean {     private String helloWorld = "Hello!World!";     public void setHelloWorld( String helloWorld) {         this.helloWorld = helloWorld;     }     public String getHelloWorld() {         return helloWorld;     } }   · 配置文件     在这个Bean中,除了id属性,还含有name属性,其值为“2hello”、 “javamxj@yahoo.com.cn ”,因为以数字开头、含有特殊字符“@”,它们是不能用在id属性中的。 bean.xml <? xml version="1.0" encoding= "GBK" ?> <! DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans >     < bean id= " helloBean " name= " 2hello,javamj@yahoo.com.cn "         class= " javamxj.spring.basic.aliases.HelloBean " >         < property name= " helloWorld " >             < value >Hello! Javamxj! </ value >         </ property >     </ bean > </ beans >   · 测试程序: Main.java package javamxj . spring . basic . aliases ; import org . springframework . beans . factory . BeanFactory ; import org . springframework . beans . factory . xml . XmlBeanFactory ; import org . springframework . core . io . ClassPathResource ; import org . springframework . core . io . Resource ; public class Main {     public static void main( String[] args) {         Resource res = new ClassPathResource( "javamxj/spring/basic/aliases/bean.xml");         BeanFactory factory = new XmlBeanFactory(res);         HelloBean helloBean  = (HelloBean) factory.getBean( "helloBean");         HelloBean helloBean2 = (HelloBean) factory.getBean( "2hello");         HelloBean helloBean3 = (HelloBean) factory.getBean( "javamj@yahoo.com.cn");         System.out.println(helloBean.getHelloWorld());         // 验证是否指向同一个Bean         System.out.println((helloBean == helloBean2));         System.out.println((helloBean == helloBean3));         // 输出这个Bean的别名         String[] aliases = factory.getAliases( "helloBean");         for ( String str : aliases) {             System.out.println(str);         }     } } 可以看出,使用中id属性和name属性几乎没有任何区别。     调用BeanFactory.getAliases(String)的方法时,传入的参数可以是任意一个Bean名字,输出的别名则是除去id之外的所有Bean名,如果没有指定id,则将其name属性中的第一个值指定为id。     当然,Bean的name属性不仅仅只是为了输入id属性所不允许的名字,它还有其它的用处,在后面的文章中会提及的。

    最新回复(0)