spring学习笔记一(IOC配置使用)
来源:互联网 发布:linux系统性能优化 编辑:程序博客网 时间:2024/06/05 05:04
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>
测试的代码如下:
@Testpublic 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>
测试的代码如下:
@Testpublic 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>测试的代码如下:
@Testpublic 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
0 0
- spring学习笔记一(IOC配置使用)
- Spring学习笔记(一)----Spring IOC配置与应用
- Spring IoC学习笔记(一)
- Spring学习笔记(一)IOC
- Spring-IOC配置(学习笔记)
- Spring3 学习笔记之(spring core 之IoC配置使用)
- Spring学习笔记(一)----理解IOC
- Spring 学习笔记:Ioc 基本配置
- Spring IOC 学习笔记(一) IoC和DI概述
- Spring IOC 学习笔记(一) IoC和DI概述
- Spring学习笔记(一)IOC与Spring基础xml配置
- Spring揭秘 学习笔记一 (Spring的IoC容器 一)
- Spring Ioc学习(一)
- Spring IoC学习笔记
- Spring IoC学习笔记
- Spring IOC学习笔记
- Spring学习笔记--IoC
- Spring IOC 学习笔记
- 有道词典
- LeetCode Implement Trie (Prefix Tree)
- CronTrigger
- Unable to execute dex: Multiple dex files define Landroid/support/annotation/AnimRes
- http 基础认证(Basic Authentication)
- spring学习笔记一(IOC配置使用)
- 用swift创建第一个控件UILabel
- VMX学习-VMX Non-Root Operation
- Google Volley 解析参考文章
- 053第471题
- Android入门(41)——第三章:使用Toast动态显示信息
- jquery 字符串转换为数值
- js 中也是存在关键字的
- GRE写作必备句型