Spring6梳理15——Bean的作用域

目录

15.1  引入

15.1.1  Orders类

15.1.2  bean-scope.xml

15.1.3  OrdersTest类

15.1.4  运行截图


15.1  引入

在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围,各取值含义参加下表:

取值 含义 创建对象的时机
singleton(默认) 在IOC容器中,这个bean的对象始终为单实例 IOC容器初始化时
prototype 这个bean在IOC容器中有多个实例 获取bean时

如果是在WebApplicationContext环境下还会有另外几个作用域(但不常用):

取值 含义
request 在一个请求范围内有效
session 在一个会话范围内有效

为了更加直观地展示singleton和prototype的Bean取值范围的不同,特给出如下代码

15.1.1  Orders类

package com.atguigu.spring6.iocxml.scope;

/**
 * @package: com.atguigu.spring6.iocxml.scope
 * @className: Orders
 * @Description:
 * @author: haozihua
 * @date: 2024/10/18 21:06
 */
public class Orders {
}

15.1.2  bean-scope.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">
    <bean id="orders_prototype" class="com.atguigu.spring6.iocxml.scope.Orders" scope="prototype"></bean>
    <bean id="orders_singleton" class="com.atguigu.spring6.iocxml.scope.Orders" scope="singleton"></bean>

</beans>

15.1.3  OrdersTest类

package com.atguigu.spring6.iocxml.scope;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @package: com.atguigu.spring6.iocxml.scope
 * @className: OrdersTest
 * @Description:
 * @author: haozihua
 * @date: 2024/10/18 21:12
 */
public class OrdersTest {
    @Test
    public void OrderSingleton() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean-scope.xml");
        Orders ordersSingleton1 = context.getBean("orders_singleton", Orders.class);
        Orders ordersSingleton2 = context.getBean("orders_singleton", Orders.class);
        System.out.println(ordersSingleton1);
        System.out.println(ordersSingleton2);
    }
    @Test
    public void OrderPrototype() {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean-scope.xml");
        Orders ordersPrototype1 = context.getBean("orders_prototype", Orders.class);
        Orders ordersPrototype2 = context.getBean("orders_prototype", Orders.class);
        System.out.println(ordersPrototype1);
        System.out.println(ordersPrototype2);
    }
}

15.1.4  运行截图

Singeleton结果

 Prototype结果

上一篇:RabbitMQ深层浅讲【通俗易懂】


下一篇:代码随想录算法训练营第46期Day37,38,39,41-而m 和 n相当于是一个背包,两个维度的背包。 理解成多重背包的同学主要是把m和n混淆为物品了,感觉这是不同数量的物品,所以以为是多重背包。 但本题其实是01背包问题! 只不过这个背包有两个维度,一个是m 一个是n,而不同长度的字符串就是不同大小的待装物品。 开始动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。 确定递推公式 dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1。 dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。 然后我们在遍历的过程中,取dp[i][j]的最大值。 所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1); 此时大家