返回
调用多次有 @Bean 注解的方法会创建多个 Bean 实例吗
后端
2023-12-05 18:34:01
引言
在 Spring 框架中,@Bean 注解是用于在 Spring 应用程序上下文中定义和注册 Bean 的。它可以用于将对象注册为 Spring Bean,以便其他组件可以通过依赖注入访问它们。
使用 @Bean 注解
要使用 @Bean 注解,您可以在一个标有 @Configuration 注解的类中定义一个方法,并用 @Bean 注解来标记这个方法。如下例所示:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
上面的代码将创建一个名为 myBean
的 Spring Bean,它是一个 MyBean
类的实例。
调用多次 @Bean 注解的方法
如果我们在同一个配置类中多次调用带有 @Bean 注解的方法,Spring 会创建多个 Bean 实例吗?答案是:否。
Spring 在创建 Bean 时,会根据 Bean 的作用域来决定是否创建多个 Bean 实例。Spring Bean 的作用域主要有两种:单例(singleton)和多例(prototype)。
- 单例(singleton) :单例 Bean 在 Spring 应用程序上下文中只创建一次,并且在整个应用程序的生命周期中都是同一个实例。
- 多例(prototype) :多例 Bean 每次被请求时都会创建一个新的实例。
默认情况下,Spring Bean 是单例的。这意味着,如果您在同一个配置类中多次调用带有 @Bean 注解的方法,Spring 只会创建一个 Bean 实例,并且在整个应用程序的生命周期中都是同一个实例。
如果您希望创建一个多例 Bean,您需要在 @Bean 注解上指定 prototype
作用域。如下例所示:
@Configuration
public class AppConfig {
@Bean(scope = BeanDefinition.SCOPE_PROTOTYPE)
public MyBean myBean() {
return new MyBean();
}
}
上面的代码将创建一个名为 myBean
的多例 Bean,它每次被请求时都会创建一个新的实例。
总结
综上所述,在 Spring 框架中,调用多次带有 @Bean 注解的方法不会创建多个 Bean 实例,除非您在 @Bean 注解上指定 prototype
作用域。