文档章节

浅析 Spring IoC - XML Bean的配置

pradosoul
 pradosoul
发布于 2015/10/20 15:25
字数 647
阅读 52
收藏 0
点赞 0
评论 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
SpringBoot的幕后推手...

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

Java工程师-Distance
06/01
0
0
浅析 Spring IoC - 注入方式

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

pradosoul
2015/10/19
266
0
Spring核心——注解自动装载

从配置上扩展 之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识: ...

随风溜达的向日葵
07/17
0
0
Spring Ioc (Inversion of Control)

以下整理自http://jinnianshilongnian.iteye.com/blog/1413846,如有侵权立即删除。 Ioc Ioc(Inversion of Control),即控制反转。不是什么技术,而是一种设计思想。在Java开发中,Ioc意味...

冰雷卡尔
2012/07/31
0
0
深入理解Spring源码(一)-IOC容器的定位,载入,注册

前言:Spring源码继承,嵌套层次非常多,读起来非常容易晕,小伙伴们在看文章的时候一定要跟着文章的思路自己去源码里点一点,看一看,并且多看几次。就会越来越清晰。下面开始正题 1.Spring...

Meet相识_bfa5
05/01
0
0
1000行代码读懂Spring(一)- 实现一个基本的IoC容器

引言 最近在读Spring源码,但是Spring代码层次嵌套太多,读起来有很大跳跃性,我有个朋友甚至开玩笑说,读Spring得拿纸笔,把方法和层次都写下来。 其实Spring我已经接触很久了,记得大学有个...

黄亿华
2014/01/13
0
37
Spring基础篇——Spring容器和应用上下文理解

上文说到,有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spr...

圆梦巨人
05/03
0
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
Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y
05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Webpack使用nodemon实时打包编译

业务场景: 1.编写一个npm组件包并且link到了项目文件中 2.需要不断的修改并run build编译npm包并且在项目run dev 查看效果 3.问题: 每次改完npm包都要手动run build编译十分的麻烦且低效,可不...

JamesView
16分钟前
0
0
电脑炸了,浪费我好几天时间,还是简要记下来吧

我的小本本一直在兢兢业业的干活,然而前几天说炸就炸了...... 爆炸现场: 软件: windows10 pro + EIS11+ 360卫士 BIOS:N1DET98W 2.24 硬件: Xeon E3 1505-V5 nv-M3000M thinkpadP70:20E...

Oh_really
21分钟前
0
0
Git之branch和checkout

1.branch是查看、创建、删除分支 #>git branch --helpNAME git-branch - List, create, or delete branchesSYNOPSIS git branch [--color[=<when>] | --no-color] [......

汉斯-冯-拉特
22分钟前
0
0
Mybatis拦截器之数据权限过滤与分页集成

需求场景 最近项目有个数据权限的业务需求,要求大致为每个单位只能查看本级单位及下属单位的数据,例如:一个集团军下属十二个旅,那么军级用户可以看到所有数据,而每个旅则只能看到本旅部...

佛系程序猿灬
31分钟前
9
0
SpringCloud 微服务 (十六) 服务追踪 Zipkin

问题 在服务中,有一个接口,该A接口中又调用了其他服务的B、C、D接口,出现一个请求耗时大的问题,这时候并不知道该B、C、D接口中哪个接口造成的耗时量,然后比如确定C服务接口出现的耗时量大,但...

___大侠
今天
0
0
Java面试基础篇——第八篇:抽象类与接口的区别

1.抽象类 抽象类:如果一个类中包含有抽象方法,或这个类使用abstract关键字修饰,则称这个类是抽象类。 抽象方法是什么呢?抽象方法就是指用abstract关键字修饰的方法。 需要注意的是:抽象...

developlee的潇洒人生
今天
2
0
jsoup 相关资料

1.jsoup 2.Jsoup概述 3.jsoup入门 4.jsoup Java HTML Parser 1.11.3 API

IT追寻者
今天
1
0
JPA @MappedSuperclass 注解说明

基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。 1.@MappedSuperclass注解只能标准在类上:@Target({java.lang....

海博1600
今天
0
0
【一】Scala Configuration 相关API

Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档。 读取配置...

Landas
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部