一、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的命名及实例化的更多相关文章

  1. Spring学习笔记(3)——Bean的注入方式

    依赖注入 依赖注入支持属性注入.构造函数注入.工厂注入. 属性注入: 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象 属性注入要求Bean提供一个默认的构造函数(无参构造函数),并为 ...

  2. Spring学习笔记—装配Bean

    在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...

  3. Spring学习笔记(2)——Bean的配置

    要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...

  4. Spring学习笔记之bean配置

    1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置 ...

  5. Spring学习笔记之Bean的实例化

    一.bean的实例化方法有3种, 1.构造器实例化 2.静态工厂方法实例化 3.实例工厂方法实例化 二.用构造器来实例化 <bean id="ShunDao" class=& ...

  6. Spring 学习笔记02

    用spring实现一个论坛基本功能 1 运行环境 Linux:Ubun 14.04 64bit IDE:IntelliJ IDEA 14.03 JDK:1.7.40 MySQL:5.5.44 Tomc ...

  7. Spring学习笔记--注入Bean属性

    这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...

  8. spring学习笔记之---bean管理

    bean管理(xml) (一)spring的工厂类 FileSystemXmlApplicationContext 读取磁盘配置文件 (二)bean实例化的三种方式 (1)使用类构造器实例化(默认无参 ...

  9. spring学习笔记之---bean属性注入

    bean属性注入 (一)构造方法的属性注入 1.Student.java package entity; public class Student { private String name; pri ...

随机推荐

  1. javascript 函数的多义性

    所谓多义性指的是一种语法多种概念,多种用法.javascript function有三个概念三种用法 1 直接当函数被调用 function foo() {...} foo() 2 在函数下挂载静态函 ...

  2. 自动生成数学题型二(框架struts2)题型如((a+b)*c=d)

    1. 生成题目 1.1 生成单个题目 public static String[] twoOperatorAndOperator(int num1, int num2) { double first ...

  3. 图文详解linux如何搭建lamp服务环境

    企业网站建设必然离不开服务器运维,一个稳定高效的服务器环境是保证网站正常运行的重要前提.本文小编将会详细讲解Linux系统上如何搭建配置高效的lamp服务环境,并在lamp环境中搭建起企业自己的网站. ...

  4. 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)

    计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...

  5. IE和其他浏览器用JS新窗口打开的问题

    Chrome中 window.open(pageURL,name,parameters) pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 例 ...

  6. 在spring boot环境中使用fastjson + redis的高速缓存技术

    因为项目需求,需要在spring boot环境中使用redis作数据缓存.之前的解决方案是参考的http://wiselyman.iteye.com/blog/2184884,具体使用的是Jackso ...

  7. python自动化测试应用-第6篇(WEB测试)--Selenium元素篇

    篇6                            python自动化测试应用-Selenium基础篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),上一篇我们搭建好p ...

  8. [转]Installing Memcached on Windows

    Installing Memcached on Windows 原文链接https://commaster.net/content/installing-memcached-windows   Sub ...

  9. 虚拟机下安装ubuntu系统

    前期准备工具; 1,Oracle VM VirtualBox虚拟机 下载地址:http://pan.baidu.com/s/1miSaGvm 密码:c3dy 2,ubuntu系统文件 下载地址:htt ...

  10. 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

    前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转 ...