spring学习笔记一(IOC配置使用)

原创 2015年07月09日 10:53:52

1.Bean的命名

每个Bean可以有一个或多个id(或称之为标识符或名字),在这里我们把第一个id称为“标识符”,其余id叫做“别名”;这些id在IoC容器中必须唯一。如何为Bean指定id呢,有以下几种方式;

(一)不指定id,只配置必须的全限定类名,由IoC容器为其生成一个标识,客户端必须通过接口“T getBean(Class<T> requiredType)”获取Bean;

<bean class="com.cdqcookes.spring.chapter01.HelloWorldImpl"></bean>

测试的代码如下:

@Test
	public void test1()
	{
		BeanFactory beanFactory =  new ClassPathXmlApplicationContext("applicationContext.xml");  
		//根据类型获取bean  
		IHelloWorld helloApi = beanFactory.getBean(IHelloWorld.class);  
		helloApi.sayHello();  
	}

[2015-07-09 11:56:17.738]-[DEBUG] org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader Loading bean definitions
[2015-07-09 11:56:17.758]-[DEBUG] org.springframework.beans.factory.xml.BeanDefinitionParserDelegate <strong>Neither XML 'id' nor 'name' specified - using generated bean name [com.cdqcookes.spring.chapter01.HelloWorldImpl#0</strong>]

从以上的输出日志可以看出,spring为我们动态生成了一个id:  com.cdqcookes.spring.chapter01.HelloWorldImpl#0


(二)指定一个id,该id必须在Ioc容器中唯一

<bean id="bean" class="com.cdqcookes.spring.chapter01.HelloWorldImpl"></bean>

测试的代码如下:

@Test
	public void test2()
	{
		BeanFactory beanFactory =  new ClassPathXmlApplicationContext("applicationContext.xml");  
		//根据id获取bean  
		IHelloWorld helloApi = (IHelloWorld)beanFactory.getBean("bean"); 
		helloApi.sayHello();  
	}

(三)指定一个name,该name必须在Ioc容器中唯一

<bean name="bean" class="com.cdqcookes.spring.chapter01.HelloWorldImpl"></bean>
测试的代码如下:

@Test
	public void test3()
	{
		BeanFactory beanFactory =  new ClassPathXmlApplicationContext("applicationContext.xml");  
		//根据name获取bean  
		IHelloWorld helloApi = (IHelloWorld)beanFactory.getBean("bean"); 
		helloApi.sayHello();  
	}

(四)指定id和name,id就是标识符,而name就是别名,必须在Ioc容器中唯一;

<bean name="alias" id="bean" class="com.cdqcookes.spring.chapter01.HelloWorldImpl"></bean>
	
	<!-- 如果id和name一样,IoC容器能检测到,并消除冲突 -->  
	<bean name="bean1" id="bean1" class="com.cdqcookes.spring.chapter01.HelloWorldImpl"></bean>

测试的代码如下:

public void test4()
	{
		BeanFactory beanFactory =  new ClassPathXmlApplicationContext("applicationContext.xml");  
		//根据id获取bean  
		IHelloWorld helloApi = (IHelloWorld)beanFactory.getBean("bean"); 
		helloApi.sayHello();  
		
		
		//根据别名获取bean  
		helloApi = (IHelloWorld)beanFactory.getBean("alias"); 
		helloApi.sayHello();  
		
		//根据id获取bean  
		helloApi = (IHelloWorld)beanFactory.getBean("bean1"); 
		helloApi.sayHello();  
		
		//因此别名不能和id一样,如果一样则由IoC容器负责消除冲突,不算别名 
		String[] alias = beanFactory.getAliases("bean1");
		Assert.assertEquals(0, alias.length);
	}
(五)指定多个name,多个name用"","," ",";"分割,第一个被用作标识符,其他的(alias1、alias2、alias3)是别名,所有标识符也必须在Ioc容器中唯一;spring的别名和标识对于方法getAliases没有区别,也就是说alias21的别名是bean2,alias22

<bean name="bean1;alias11,alias12;alias13 alias14"
		class=" com.cdqcookes.spring.chapter01.HelloWorldImpl" />
	<!-- 当指定id时,name指定的标识符全部为别名 -->
	<bean id="bean2" name="alias21;alias22"
		class="com.cdqcookes.spring.chapter01.HelloWorldImpl" />

测试的代码如下:

@Test  
	public void test5() {  
		BeanFactory beanFactory =  
			new ClassPathXmlApplicationContext("applicationContext.xml");  
		//1根据id获取bean  
		IHelloWorld bean1 = beanFactory.getBean("bean1", IHelloWorld.class);  
		bean1.sayHello();  
		//2根据别名获取bean  
		IHelloWorld alias11 = beanFactory.getBean("alias11", IHelloWorld.class);  
		alias11.sayHello();  
		//3验证确实是四个别名         
		String[] bean1Alias = beanFactory.getAliases("bean1");  
		System.out.println("======= bean1 别名========");  
		for(String alias : bean1Alias) {  
			System.out.println(alias);  
		}  
		Assert.assertEquals(4, bean1Alias.length);  
		//根据id获取bean  
		IHelloWorld bean2 = beanFactory.getBean("bean2", IHelloWorld.class);  
		bean2.sayHello();  
		//2根据别名获取bean  
		IHelloWorld alias21 = beanFactory.getBean("alias21", IHelloWorld.class);  
		alias21.sayHello();  
		//验证确实是两个别名  
		String[] bean2Alias = beanFactory.getAliases("bean2");  
		System.out.println("======= bean2 别名========");  
		for(String alias : bean2Alias) {  
			System.out.println(alias);  
		}     
		Assert.assertEquals(2, bean2Alias.length);     
	}  
(六)、使用<alias>标签指定别名,别名也必须在IoC容器中唯一
<bean name="bean" class="com.cdqcookes.spring.chapter01.HelloWorldImpl"/>  
<alias alias="alias1" name="bean"/>  
<alias alias="alias2" name="bean"/>

测试的代码如下:

@Test  
	public void test6() {  
		BeanFactory beanFactory =  
			new ClassPathXmlApplicationContext("applicationContext.xml");  
		//根据id获取bean  
		IHelloWorld bean = beanFactory.getBean("bean", IHelloWorld.class);  
		bean.sayHello();  
		//根据别名获取bean  
		IHelloWorld alias1 = beanFactory.getBean("alias1", IHelloWorld.class);  
		alias1.sayHello();  
		IHelloWorld alias2 = beanFactory.getBean("alias2", IHelloWorld.class);  
		alias2.sayHello();  
		String[] beanAlias = beanFactory.getAliases("<span style="font-family: verdana, arial, helvetica, sans-serif;">alias2</span>");    
		for(String alias : beanAlias) {  
			System.out.println(alias);  
		}    
		Assert.assertEquals(2, beanAlias.length);  
	}  

2.实例化Bean

相关文章推荐

Spring IoC学习笔记(2):初步配置bean以及一般操作

关于spring IoC,个人理解可以把它看成是专门提供各种服务的一个机构,而我们自己声明的类,如果被放入其中,则会享受这种服务。打个比喻,有一公主,如果她想要什么只要和下属说一声就可以,不用自己亲自...

Spring 学习笔记:Ioc 基本配置

1、 IOC 基础 Ioc(Inversion of  control),即控制反转,它不是一种技术,而是一种编程思想:将对象的控制权交由容器控制,也就是所谓的“反转”,而不是传统的在对象里面通过n...

Spring-IOC配置(学习笔记)

Instantiating beans instantiation with a constructor public class Car { public Car(){ ...

spring学习笔记00 helloword-IOC&DI概述-配置bean-属性配置细节

1.spring的helloword: 2.IOC和DI 3.配置bean: 4.属性配置细节:

Spring学习笔记(一)IOC与Spring基础xml配置

Spring 基础配置以及IOC
  • z55887
  • z55887
  • 2016年09月09日 14:38
  • 190

Spring学习笔记(一)----Spring IOC配置与应用

1.     FAQ:不给提示: a)     window –preferences – myeclipse – xml – xml catalog b)     UserSpecified E...

Spring学习笔记(6)---------IoC的三种注入方式

接口注入(不推荐)构造器注入(死的应用)getter,setter方式注入(比较常用) Type1 接口注入 我们常常借助接口来将调用者与实现者分离。如: public class ClassA...

Spring 学习笔记(1)—— 通过一个小例子体会 IoC 的概念

《墨攻》中的一个场面,刘德华所饰演的墨者——革离,到达梁国都成下时候,城上的梁国守军问道:“来者何人?”,刘德华回答:“墨者革离!” 使用Java语言为这个场景“城门叩问”的场景编写剧本。革离是《墨攻...

Spring IoC学习笔记(二)

五、IOC容器依赖注入1.依赖注入的时间当Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Be...

Spring学习笔记---2-IOC详解

一、IOC 到底为何物?        IOC(Inversion of Control) ,直译过来叫控制反转; 其实是在面向对象编程的一种设计原则,可以用来降低计算机代码之间的耦合度;      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring学习笔记一(IOC配置使用)
举报原因:
原因补充:

(最多只允许输入30个字)