浅析 Spring IoC - XML Bean的配置
浅析 Spring IoC - XML Bean的配置
pradosoul 发表于2年前
浅析 Spring IoC - XML Bean的配置
  • 发表于 2年前
  • 阅读 39
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: Spring IoC的xml Bean的配置

下面是Spring IoC的 xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- <import resource="beans2.xml"/> -->

    <bean id="userDAO" class="com.dao.impl.UserDAOImpl" />
    
    <bean id="userService" class="com.service.impl.UserServiceImpl">
        <property name="userDAO" ref="userDAO" />
    </bean>
    
    <alias name="userService" alias="userServiceAlias"/>
</beans>

    在 Spring IoC的 xml 配置文件中,<bean>标签主要用来进行 Bean 定义; 而 <alias> 用于定义 Bean 的别名; <import> 用于导入其他配置文件的 Bean定义,可以放在 <beans>下任何位置,无顺序关系。

1. Bean 的命名

    每一个 Bean 可以有一个或者多个 id(或称之为 标识符 或 名称),第一个 id 称之为”标识符“,其余 id 叫做别名;这些id 在容器中必须唯一。下面有几种方式 为 Bean 指定 id:

    (1)不指定 id,之配置必须的 全限定类名,由 IoC 容器为其生成一个标识,必须通过 getBean (Class<T>)获取 Bean。

<bean class="com.service.impl.UserServiceImpl">
    <property name="userDAO" ref="userDAO" />
</bean>

    测试代码:

@Test
	public void testAddUser() throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		
		UserServiceImpl service = (UserServiceImpl) ctx.getBean(UserServiceImpl.class);
		
		User user = new User();
		user.setUsername("Olive");
		service.addUser(user);
	}

    (2)指定 id,而且 id 在  IoC 容器中唯一。代码如开头部分,调用如下:

UserServiceImpl service = (UserServiceImpl) ctx.getBean("userService");

    (3)指定 name,这样name就是标识符,必须在 IoC 容器中唯一,用法同上面的 id

    (4)指定 id 和 name, id就是标识符,而 name 就是别名,必须在 IoC容器中唯一。如果 id 和 name 相同, IoC容器能检测到并消除冲突。

    (5)指定多个 name, 用 逗号、分号或者 空格符 分隔,第一个被用作标识符,其他的都是别名。

<!-- 当指定id时,name 指定的标识符全都为别名 -->
    <bean id="userService" name="userService,userS1,userS2" class="com.service.impl.UserServiceImpl">
        <property name="userDAO" ref="userDAO" />
    </bean>

    (6)使用 <alias> 标签指定别名,别名也必须在 IoC 容器中唯一,代码同文章开始的配置文件。

    从上面来看,name 或者 id 都可以作为标识符,那么为什么还要有两个同时存在呢?因为当使用基于 XML 的配置元数据时,在 XML 中 id 是一个真正的XML id属性,因此当其他的定义来引用这个id时就体现出id的好处了,可以利用XML解析器来验证引用的这个id是否存在,从而更早的发现是否引用了一个不存在的bean,而使用name,则可能要在真正使用bean时才能发现引用一个不存在的bean。

共有 人打赏支持
粉丝 7
博文 40
码字总数 37445
×
pradosoul
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: