Spring学习笔记——02 Bean的命名及实例化
一、Bean的命名
前一篇讲到IoC是一个管理Bean的容器,Bean多数情况下都是通过XML文件进行配置的,其中Bean的命名有以下几种方式,现在梳理一下。
1. 不指定id,只配置类名
<bean class="com.erving.HelloImpl"></bean>
若要调用该Bean,需要用以下语句:
HelloApi helloApi = context.getBean(HelloApi.class);
2. 指定id,且id必须在IoC容器中唯一
<bean id="hello" class="com.erving.HelloImpl"></bean>
若要调用,则需要用以下语句:
HelloApi helloApi = context.getBean("hello", HelloApi.class);
3. 指定name,且name必须在IoC容器中唯一
<bean name="hello" class="com.erving.HelloImpl"></bean>
若要调用,则需要用以下语句:
HelloApi helloApi = context.getBean("hello", HelloApi.class);
4. 同时指定了id和name,则id作为标识符,name作为别名,这两者在容器中都唯一。
<bean id="hello" name="alias" class="com.erving.HelloImpl"></bean>
这时Bean即可通过id实例化,也可通过name实例化:
HelloApi helloApi1 = context.getBean("hello", HelloApi.class);
HelloApi helloApi2 = context.getBean("alias", HelloApi.class);
5. 当一个Bean有多个name时,第一个为标识符,其他的为别名。多个name之间可通过分号、顿号或空格隔开。
6. 此外,还可以通过<alias>标签指定别名。
<bean name="hello" class="com.erving.HelloImpl"></bean>
<alias name="hello" alias="alias"/>
这与以下语句的效果完全一致
<bean name="hello;alias" class="com.erving.HelloImpl"></bean>
二、Bean的实例化
Bean的实例化有三种形式,分别为构造器、静态工厂和实例工厂。
1. 构造器。
通常情况,通过反射调用指定类的构造器来创建bean。此时bean的类型不一定为JavaBean,任何Java类都可以。构造器又分为无参数构造器和有参数构造器。
以上介绍的都是无参数构造器,配置如下:
<bean id="hello" class="com.erving.HelloImpl"></bean>
有参数的构造器,配置如下:
<bean name="hello" class="com.erving.HelloImpl2">
<constructor-arg index="0" value="erving..."></constructor-arg>
</bean>
2. 静态工厂。
首先定义静态工厂类:
public class HelloApiStaticFactory {
public static HelloApi newInstance(String message) {
return new HelloImpl2(message);
}
}
然后编辑配置文件:
<bean id="bean2" class="com.erving.HelloApiStaticFactory" factory-method="newInstance">
<constructor-arg index="0" value="tian..."></constructor-arg>
</bean>
其中的class属性为静态工厂类,另外需要指明实例化bean的方法。
具体实例化与第一种方法完全一致:
public void testStaticFactory() {
ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");
HelloApi helloApi = context.getBean("bean2", HelloApi.class);
helloApi.sayHello();
}
3. 实例工厂。
首先定义实例工厂类:
public class HelloApiInstanceFactory {
public HelloApi newInstance(String message) {
return new HelloImpl2(message);
}
}
然后修改配置文件,配置文件分为两部分:一是实例工厂的bean,二是通过工厂bean创建bean。
<!-- 1、定义实例工厂Bean -->
<bean id="beanInstanceFactory" class="com.erving.HelloApiInstanceFactory"/>
<!-- 2、使用实例工厂Bean创建Bean -->
<bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance">
<constructor-arg index="0" value="Hello Spring!"></constructor-arg>
</bean>
Spring学习笔记——02 Bean的命名及实例化的更多相关文章
- Spring学习笔记(3)——Bean的注入方式
依赖注入 依赖注入支持属性注入.构造函数注入.工厂注入. 属性注入: 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象 属性注入要求Bean提供一个默认的构造函数(无参构造函数),并为 ...
- Spring学习笔记—装配Bean
在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...
- Spring学习笔记(2)——Bean的配置
要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...
- Spring学习笔记之bean配置
1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置 ...
- Spring学习笔记之Bean的实例化
一.bean的实例化方法有3种, 1.构造器实例化 2.静态工厂方法实例化 3.实例工厂方法实例化 二.用构造器来实例化 <bean id="ShunDao" class=& ...
- Spring 学习笔记02
用spring实现一个论坛基本功能 1 运行环境 Linux:Ubun 14.04 64bit IDE:IntelliJ IDEA 14.03 JDK:1.7.40 MySQL:5.5.44 Tomc ...
- Spring学习笔记--注入Bean属性
这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...
- spring学习笔记之---bean管理
bean管理(xml) (一)spring的工厂类 FileSystemXmlApplicationContext 读取磁盘配置文件 (二)bean实例化的三种方式 (1)使用类构造器实例化(默认无参 ...
- spring学习笔记之---bean属性注入
bean属性注入 (一)构造方法的属性注入 1.Student.java package entity; public class Student { private String name; pri ...
随机推荐
- 【转载】关于c++中的explicit
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...
- 20分钟快速了解Redis
Redis可以说是目前最火爆的NoSQL数据库! 过去几年,Memcached很盛行,现在有很多公司已将Memcached替换成了Redis.当然,很多人替换并不清楚为什么,只是感觉不想让主流抛弃,这 ...
- 线段树(hdu 2795)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- sql中的for xml path() 实现字符串拼接
通常我们需要在sql中拼接字符串 ,可以用for xml path() 来进行拼接,如下实例. 同时未去掉最后一个逗号可以用LEFT函数来实现. ) AS UserName FRO ...
- hadoop环境搭建之关于NAT模式静态IP的设置 ---VMware12+CentOs7
很久没有更新了,主要是没有时间,今天挤出时间验证了一下,果然还是有些问题的,不过已经解决了,就发上来吧. PS:小豆腐看仔细了哦~ 关于hadoop环境搭建,从单机模式,到伪分布式,再到完全分布式,我 ...
- javascript动画毛爷爷满天飘
var minSize=50;var maxSize=100;var newOn=200;var flakeColor="#fff";var flak=$("<di ...
- 百度开源上传组件WebUploader的formData动态传值技巧
基于Web页面的文件上传一直是互联网应用开发中避免不了的,从asp时代的AspUpload组件.到asp无组件上传,到.Net时代的FileUpload,再到HTML5时代的各种基于jQuery的上传 ...
- endsWith is not a function解决方案
在写javascript脚本时,用某些方法,有时候会碰到"XXX is not a function"之类的报错. 出现这种情况,主要是因为某些方法在低版本浏览器上不支持.比如说& ...
- poj1751最小生成树
The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor system of p ...
- 【教程】发布NAServer到ArcGIS Server 10.4上[超详细]
前阵子对ArcGIS API For JavaScript的网络分析有兴趣,但是不知道其数据是如何获取的. 查阅API知道,AJS的网络分析只有三个功能:最短路径(RouteTask).最近设施点(C ...