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

3801

被折叠的 条评论
为什么被折叠?



