Spring 基础教程 (第 8 章) - Spring Bean 作用域(2)

文章通过示例介绍了在Spring框架中,当一个Bean定义为prototype作用域时,每次请求都会创建新的Bean实例,Spring容器仅负责创建,后续生命周期管理由客户端代码负责。配置prototypeBean的方法是在XML配置文件中设置scope属性为prototype。
摘要由CSDN通过智能技术生成

8.2 prototype

如果一个 Bean 定义的作用域为 prototype,那么这个 Bean 就被称为 prototype bean。对于 prototype bean 来说,Spring 容器会在每次请求该 Bean 时,都创建一个新的 Bean 实例。

从某种意义上说,Spring IoC 容器对于 prototype bean 的作用就相当于 Java 的 new 操作符。它只负责 Bean 的创建,至于后续的生命周期管理则都是由客户端代码完成的。

在 Spring 配置文件中,可以使用 <bean> 元素的 scope 属性将 Bean 的作用域定义成 prototype,其配置方式如下所示:

<bean id="..." class="..." scope="prototype"/>
例 1

下面我们就通过一个简单的实例,对 Bean 的 prototype 作用域进行演示。

创建命名为 PrototypeBean 的类,代码如下:

package section2.demo1;

/**
 * ClassName: PrototypeBean
 * Description: TODO
 *
 * @author chuanlu
 * @version 1.0.0
 */
public class PrototypeBean {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }
}

修改 Spring 配置文件 spring-config.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 原型模式 prototype -->
    <bean id="prototypeBean" class="section2.demo1.PrototypeBean" scope="prototype">
        <property name="str" value="传陆编程"/>
    </bean>

</beans>

创建命名为 MainApp 的类,代码如下:

package section2.demo1;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * ClassName: MainApp
 * Description: TODO
 *
 * @author chuanlu
 * @version 1.0.0
 */
public class MainApp {
    private static final Log LOGGER = LogFactory.getLog(MainApp.class);

    public static void main(String[] args) {
        //获取 ApplicationContext 容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        PrototypeBean prototypeBean = context.getBean("prototypeBean", PrototypeBean.class);
        PrototypeBean prototypeBean2 = context.getBean("prototypeBean", PrototypeBean.class);
        LOGGER.info(prototypeBean);
        LOGGER.info(prototypeBean2);
    }
}

执行 MainApp 中的 main 方法,控制台输出如下:

4月 08, 2022 12:38:44 下午 section2.demo1.MainApp main
信息: section2.demo1.PrototypeBean@6631f5ca
4月 08, 2022 12:38:44 下午 section2.demo1.MainApp main
信息: section2.demo1.PrototypeBean@614ca7df

从运行结果可以看出,两次输出的内容并不相同,这说明在 prototype 作用域下,Spring 容器创建了两个不同的 prototypeBean 实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传陆编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值