多实例Bean

这篇博客探讨了Spring框架中Bean的两种实例模式——单例和多例。默认情况下,Spring Bean是单例的,确保每次从容器中获取到的是同一个对象。通过设置属性为`prototype`,可以创建多例Bean,每次请求都会得到一个新的实例。文章通过测试展示了这两种模式的行为,并指出多例模式可能带来的系统资源开销,建议通常选择默认的单例模式。

多实例Bean

单例模式Bean

在Spring中,Bean默认是单例的,也就是说当我们向IOC容器中添加一个Bean,多次获取Bean,默认是同一个Bean,我们也可以显示地声明Bean为单例,使用@Scope设置属性为singleton即可

@Configuration
public class MyConfiguration {

    @Bean
    @Scope("singleton")
    public Person person(){
        return new Person(18,"wang");
    }
}

现在我们多次获取Bean,测试两次获取的Bean是否为同一个对象

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person1;

    @Autowired
    Person person2;

    @Test
    void contextLoads() {
        System.out.println(person1 == person2);
    }

}

测试结果如下

在这里插入图片描述

说明是同一个Bean

多例模式Bean

@Scope的值改为prototype,则该Bean为多例属性,每次从容器中取出,都是取出一个该Bean的原型复制出来的对象

@Configuration
public class MyConfiguration {

    @Bean
    @Scope("prototype")
    public Person person(){
        return new Person(18,"wang");
    }
}

测试用例如下

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person1;

    @Autowired
    Person person2;

    @Test
    void contextLoads() {
        System.out.println(person1 == person2);
    }

}

测试结果如下

在这里插入图片描述

以上测试说明确实从IOC容器中取出不同的两个Bean

需要注意的是,多例模式对系统开销比较大,一般情况下使用默认的单例模式即可

如果Bean使用@Component添加,则将@Scope添加在类名上

@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@Scope("prototype")
public class Person {
    private int age = 18;
    private String name = "wang";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值