知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 10703|回复: 6

[讨论] TO ADAMED

[复制链接]
发表于 2007-1-25 14:09:19 | 显示全部楼层 |阅读模式
请问spring中的bean id 的命名如果是系统调用的如dataSource或messageSource是不能随便改的,还有吗?
什么时候用id,什么时候用name,我的理解是如action mapping的映射用name,对吗?请详细点
发表于 2007-1-25 14:24:46 | 显示全部楼层
拜托大家不要发to adamed这样的帖子啦。。。
可以发短消息给我嘛。。或者发确定的题目。呵呵。。。

你这个问题我暂时说不太明白。等我整理下资料然后告诉你。 谁让我还不够NB呢。诶。。。

整理如下:

一般来说,在一个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属性所不允许的名字,它还有其它的用处,在后面的文章中会提及的。

这是别人写的我转载的哦。。特此说明啊。。呵呵。。。
Spring参考手册1.1版的3.2.4节就专门讲这个。。。。

还有就是Spring和Hibernate有参考文档的。中文的。满江红翻译的。非常不错。。比市面上任何书籍都权威。呵呵。。。


[ 本帖最后由 adamed 于 2007-1-25 14:35 编辑 ]
发表于 2007-1-25 14:49:14 | 显示全部楼层
Spring1.1参考手册3.2.4 Bean 的标志符(id与name)

每一个bean都有一个或多个id(也叫做标志符,或名字;这些名词说的是一回事)。这些id在管理bean的BeanFactory或ApplicationContext中必须是唯一的。一个bean差不多总是只有一个id,但是如果一个bean有超过一个的id,那么另外的那些本质上可以认为是别名。
在一个XmlBeanFactory中(包括Application Context 的形式), 你可以用id或者那么属性来制定bean的id(s),并且在这零个或其中一个属性中至少制定一个id。id属性允许你制定一个id,并且它在XML DTD(定义文档)中作为一个真正的XML元素的ID属性被标记,所以XML解析器能够在其他元素指回向它的时候做一些额外的校验。正因为如此,用id属性制定bean的id是一个比较好的方式。然而,XML规范严格限定了在XML ID中合法的字符。通常这并不是真正限制你,但是如果你有必要使用这些字符(在ID中的非法字符),或者你想给Bean增加其他的别名,那么你可以通过name属性制定一个或多个id(用逗号,或者分号;分隔)

这是原文。。在pdf上拷贝不了。我打了一遍累死了

评分

1

查看全部评分

发表于 2007-1-25 16:32:46 | 显示全部楼层
 楼主| 发表于 2007-1-25 18:19:48 | 显示全部楼层
发表于 2007-1-25 19:24:05 | 显示全部楼层
发表于 2007-4-3 16:01:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-7 17:07

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表