文档章节

浅析 Spring IoC - XML Bean的配置

pradosoul
 pradosoul
发布于 2015/10/20 15:25
字数 647
阅读 70
收藏 0

下面是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。

© 著作权归作者所有

共有 人打赏支持
pradosoul
粉丝 6
博文 40
码字总数 37445
作品 0
闵行
程序员
私信 提问
Spring中ApplicationContext和beanfactory区别

org.springframework.beans及org.springframework.context包是Spring IoC容器的基础。BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。ApplicationContext是BeanFactory的扩...

ArlenXu
2015/01/18
0
0
Spring BeanFactory和FactoryBean的区别

有些东西可能知其用,但也需知其所以然,特转载该篇Spring BeanFactory和FactoryBean的区别 及 包是 Spring IoC 容器的基础。 一、BeanFactory 定义了IOC容器的最基本形式,并提供了IOC容器应...

淡淡的倔强
09/07
0
0
浅析 Spring IoC - 注入方式

IoC 容器的概念 IoC 容器指 具有依赖注入功能的容器,IoC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中 new 相关对象,而是由 IoC 容器进行...

pradosoul
2015/10/19
266
0
2,spring中IOC的实现【analyze spring framework source】

接上一篇 1. Introduce how to import the Spring Framework sourcecode into an eclipse project 一. 结构 spring中bean管理设计到下面3个包 core 相当于一个工具类,bean包是对IOC的实现包...

爱吃大肉包
2013/01/23
0
1
SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance
06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

epoll中使用

1、一个线程epoll_wait时,另一个线程调用epoll_ctl是安全的。 2、使用edge触发,在socket有数据到来后,不收取数据,再次调用epoll_ctl将socket加入,仍会触发下一次动作。 asio用该方法来发...

gelare
12分钟前
1
0
PHP规范PSR2

PSR标准 - PSR-2 为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。 各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作...

geek土拨鼠
27分钟前
5
0
【极简】如何在服务器上安装SSL证书?

本文适合任何人了解,图形化操作。下面以腾讯云为例,并且服务器(linux)也安装了宝塔面板。 1.登陆腾讯云账号进入控制台,找到SSL的产品 2.按要求申请并填写表单,记住私钥密码 3.提交后,待...

皇冠小丑
35分钟前
1
0
深入理解编译器

深入理解编译器 原文出处 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 1 Rust中文社区首页 2 Rust中文社区Rust文章栏目 3 知乎专栏Rust语言 编程语言是如何工作的 从内部理解...

krircc
37分钟前
1
0
Centos7&docker-ce&compose&wordpress

如题,最近帮人装个WordPress,想起来用docker方便,这里做个记录。 因为docker要求linux内核版本3.10以上我记得,所以直接用的centos7省去很多麻烦。 主机在国内的先把yum源改成国内的阿里云...

虚拟世界的懒猫
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部