@Scope("singleton")注解用于指定一个Bean的作用域,它的作用是告诉Spring容器,创建一个单例的Bean实例,也就是说,在整个应用程序中,只会有一个实例存在。如果没有指定@Scope注解,默认情况下,Spring会使用单例模式创建Bean实例。
@ConditionalOnMissingBean注解是用于条件化地创建Bean实例的。当一个Bean被标注了@ConditionalOnMissingBean注解时,Spring容器会检查是否已经存在一个相同类型的Bean实例,如果存在,则不会创建这个Bean实例,否则才会创建。这个注解的作用是,确保只有在没有其他同类型的Bean实例存在时,才会创建当前这个Bean实例。
举个例子,假设我们有一个接口MyInterface,有两个实现类MyInterfaceImpl1和MyInterfaceImpl2,我们需要在Spring容器中创建一个MyInterface类型的Bean实例,并且只有在没有其他同类型的Bean实例存在时,才会创建MyInterfaceImpl1的实例,否则创建MyInterfaceImpl2的实例。
代码如下:
@Configuration
public class AppConfig {
@Bean
@ConditionalOnMissingBean(MyInterface.class)
public MyInterface myInterface() {
return new MyInterfaceImpl1();
}
@Bean
public MyInterface myInterfaceImpl2() {
return new MyInterfaceImpl2();
}
}
在上面的例子中,@ConditionalOnMissingBean注解指定了只有在MyInterface类型的Bean实例不存在时,才会创建MyInterfaceImpl1的实例。因此,如果在容器中已经存在一个MyInterface类型的Bean实例,那么就不会创建MyInterfaceImpl1的实例,而是创建MyInterfaceImpl2的实例。