java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Bean的Scope作用域

Spring Bean的Scope作用域详解

作者:catoop

本文介绍了Spring框架中的BeanScope(作用域),包括Singleton(单例)和Prototype(原型)两种常见作用域的定义、生命周期和适用场景

Spring Bean的Scope作用域

Spring框架中的Bean Scope(作用域)用于控制Bean的生命周期和可见性。

Spring提供了多种作用域,每种作用域决定了Bean在应用中的创建和管理方式。

以下是Spring中最常用的作用域及其特点:

Scope作用域类型

1. Singleton(单例)

 @Component
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
 public class MySingletonComponent {
     // ...
 }

2. Prototype(原型)

 @Component
 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 public class MyPrototypeComponent {
     // ...
 }

在Spring框架中,使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)修饰的@Component表示该组件是一个原型(Prototype)作用域的bean。

这意味着每次通过Spring容器请求这个bean时,都会创建一个新的实例。

与单例(Singleton)作用域的bean不同,原型作用域的bean不会被缓存,每次请求都会返回一个新的实例。

生命周期

每次请求都创建新实例

生命周期管理

在Spring框架中,当一个Bean的作用域被设置为SCOPE_PROTOTYPE时,这个Bean在容器启动时不会被自动实例化。相反,每次通过Spring容器请求这个Bean时,才会创建一个新的实例。

关键总结

Singleton作用域

Prototype作用域

示例:

@Data
@Accessors(chain = true)
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class Task implements Runnable {

    private TaskInfo taskInfo;

    // 注入对象
    @Autowired
    private TaskService taskService;

    @Override
    public void run() {
        taskService.process(taskInfo);
    }
}
// 调用示例代码
ApplicationContext context = xxx;
ExecutorService executor = xxx;
TaskInfo taskInfo = xxx;
// 这里每次getBean获取的Task对象都是一个新的实例
Task task = context.getBean(Task.class).setTaskInfo(taskInfo);
executor.execute(task);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文