@Bean & @Scope

@Scope 支持以下几种作用域:

  • 基本作用域
    • singleton(单例)
    • prototype(多例)
  • Web 作用域
    • reqeust
    • session
    • globalsession
  • 自定义作用域
@Bean
public SyncClient createSyncClient(OtsConfig otsConfig) {
    return otsConfig.createSyncClient();
}
  

通过 @Scope 注解指定作用域:

@Bean
@Scope("prototype")
public SyncClient createSyncClient(OtsConfig otsConfig) {
    return otsConfig.createSyncClient();
}
  

不同作用域的 bean 组合时,使用时的实际作用域可以理解成以最小的作用域为准。

如下例中 OtsService 为单例模式,即使 SyncClient 设置为原型模式,使用时所有 OtsService bean 的调用使用的都是同一个 SyncClient 实例。
如果有别的服务 AnohterService 中也使用了 SyncClient 注入,则这个实例才是另外的一个 SyncClient 实例。

@Service
@Slf4j
@RequiredArgsConstructor
public class OtsServiceImpl implements OtsService {

    private final SyncClient syncClient;

}