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入门学习笔记][spring的IoC原理]

什么叫IoC控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency ...
  • zy691357966
  • zy691357966
  • 2016年04月13日 23:51
  • 2276

Spring(一)Spring IOC容器配置详解——基于xml文件形式

一、Spring         Spring是一个轻量级的框架,相当于一个平台性质,大大简化了Java企业级应用的开发,提供了强大的、稳定的功能。Spring框架大约由20个功能模块组成,这些模块被...
  • qq_16313365
  • qq_16313365
  • 2015年01月24日 20:19
  • 1730

Spring IOC的配置使用

1.1.1 XML配置的结构 一般配置文件结构如下: import resource=”resource1.xml” /> class=””> class=””>...
  • loonie51
  • loonie51
  • 2015年06月19日 00:35
  • 229

Spring学习一、IOC的代码实现

先定义一个xml文件
  • chuxue1989
  • chuxue1989
  • 2016年02月20日 11:55
  • 158

Spring学习笔记(一)IOC

一,创建一个maven项目,在pom.xml中加入spring依赖
  • ZJ_DE
  • ZJ_DE
  • 2017年08月24日 20:15
  • 64

Spring IoC学习笔记(一)

一、IoC基本介绍   大多数应用都是由两个或多个类通过彼此的合作来实现业务逻辑的,这使得每个对象都需要与之合作对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么如你所见,这将导致...
  • qq_26345625
  • qq_26345625
  • 2016年09月13日 11:29
  • 49

Spring学习(一)ioc理解

对Spring有所了解的都应该知道,spring贯穿始终的两个重要的思想,一个是IOC(控制反转),一个是DI(依赖注入),对于新手而言,这两个概念比较难理解,我用自己的想法来解释下。...
  • u011250851
  • u011250851
  • 2015年08月25日 11:47
  • 10950

【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(一):用到“反射”编程

1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 ...
  • cangchen
  • cangchen
  • 2015年04月08日 22:25
  • 1871

SpringMVC 学习笔记(一) Hello World

Spring MVC 是目前最主流的MVC 框架之一 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请 求的控制器,而无须实现任何接口。 支持 REST 风格的 URL 请求 采...
  • a67474506
  • a67474506
  • 2015年06月04日 14:26
  • 2027

Spring IOC的简单实现(附demo)

简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法即可。   原理简单说明:   Spring容器...
  • hejingyuan6
  • hejingyuan6
  • 2015年03月10日 12:27
  • 4043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring学习笔记一(IOC配置使用)
举报原因:
原因补充:

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