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>
时间: 2024-08-02 15:10:44

Spring学习笔记——02 Bean的命名及实例化的相关文章

Spring 学习笔记02

依赖注入 依赖注入的方式主要有两种,setter注入和构造器注入 1.setter注入 setter注入指的是通过成员变量的setter方法来注入被依赖的对象 首先定义两个接口: public interface People { void drinkWater(); } public interface Water { String makeDrink(); } 定义实现类 public class Tea implements Water{ public String makeDrink()

Spring学习笔记2 - Bean

Bean是一个被实例化.组装,并通过Spring IoC容器所管理的对象. Bean定义的属性 属性 描述 class 这个属性是强制性的,并且制定用来创建bean的bean类 name 这个属性指定唯一的bean标识符.在基于XML的配置元数据中,可以使用ID和/或name属性来制定bean标识符 scope 指定由特定的bean定义创建的对象的作用域 constructor-arg 用来注入依赖关系 properties 用来注入依赖关系 autowiring mode 用来注入依赖关系 l

Spring学习笔记5 - Bean定义继承

bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息. 例如初始化方法,静态工厂方法名等等. 子bean的定义继承父定义的配置数据.子定义可以根据需要重写一些值,或添加其他值(与Java类的继承概念一致). 当使用基于XML的配置元数据时,通过使用父属性,指定父bean作为该属性的值来表明子bean的定义. 示例: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmln

Spring学习笔记之bean配置

1.命名bean 每个bean都有一个或者多个的的标识符.这些标识符必须在加载他们的容器里边唯一.一个bean经常有且只有一个标识符,但是如果需要超过一个的名字,可以考虑额外的别名. 基于xml的配置源文件,你可以使用id或者name属性去指定bean的标识符,这里有个问题,如果是名字和ID的不一致,内部又是如何处理的? 如果你不想再另外再给他们定义一个别名,你可以指定name属性,利用逗号(,),分号(;)或者空格.spring3.1以前id属性是xsd:ID类型的,这个是唯一的,3.1以后,

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

这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.context.ApplicationContext; import org.springframework.context.support.Clas

Spring学习笔记3 - Bean的生命周期

当一个bean被实例化时,它可能需要执行一些初始化使它转换成可用状态. 当bean不再需要,并且从容器中移除是,可能需要做一些清除工作. 为了定义安装和拆卸一个bean,我们只要声明带有init-method和/或destroy-method参数 init-method属性指定一个方法,在实例化bean时,立即调用该方法. destroy-method指定一个方法,只有从容器中移除bean之后,才能调用该方法. 示例: beans.xml <?xml version="1.0"

Spring学习笔记之Bean的实例化

一.bean的实例化方法有3种, 1.构造器实例化 2.静态工厂方法实例化 3.实例工厂方法实例化 二.用构造器来实例化 <bean id="ShunDao" class="test.FTPDAO"  > id或者name用于指定bean的名称,class用于指定bean的类型 三.静态工厂方法实例化 <bean id="ShunDao" class="test.FTPDAO" factory-method=

Spring学习笔记之Bean的一些属性设置

1.beans 里边配置default-init-method="shunge",有这个方法的会执行,没有也不会报错 2.beans 里边配置default-destroy-method="shun88",这个只适用于单例模式,而且只在容器销毁的时候被调用 3.lazy-init="true" 可以在容器初始化的时候不加载,随用随加载,不使用不加载 4.depends-on="wait" 和ant里边的依赖都一样,多个用逗号分

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;