Java 如果使用@bean标记创建一个bean,那么我们可以创建两个bean。每个应用程序上下文的单例数是多少
在这里,如果StudentInfo类是prototype,那么它将创建两个单独的引用,这是可以的,但是对于singleton,它也创建了两个bean,命名student和student1,然后它打破了每个应用程序上下文的singleton规则。如果我遗漏了什么,请告诉我。在这种情况下,我们如何为每个应用程序上下文创建一个单例beanJava 如果使用@bean标记创建一个bean,那么我们可以创建两个bean。每个应用程序上下文的单例数是多少,java,spring,singleton,Java,Spring,Singleton,在这里,如果StudentInfo类是prototype,那么它将创建两个单独的引用,这是可以的,但是对于singleton,它也创建了两个bean,命名student和student1,然后它打破了每个应用程序上下文的singleton规则。如果我遗漏了什么,请告诉我。在这种情况下,我们如何为每个应用程序上下文创建一个单例bean @Configuration @ComponentScan("com.spring") public class AnnotationConfiguration {
@Configuration
@ComponentScan("com.spring")
public class AnnotationConfiguration {
@Bean(name="student")
public StudentInfo info() {
return new StudentInfo("girraj","gupta");
}
@Bean(name="student1")
public StudentInfo info1() {
return new StudentInfo("girraj1","gupta1");
}
}
从
当一个bean是一个单实例时,只管理该bean的一个共享实例,并且对具有与该bean定义匹配的一个或多个id的bean的所有请求将导致Spring容器返回该特定bean实例
在您的示例中,您正在创建同一类的两个不同bean。由于作用域是特定于bean的,因此它与类本身无关。From
当一个bean是一个单实例时,只管理该bean的一个共享实例,并且对具有与该bean定义匹配的一个或多个id的bean的所有请求将导致Spring容器返回该特定bean实例
在您的示例中,您正在创建同一类的两个不同bean。由于作用域是特定于bean的,因此它与类本身无关。依赖项注入是一个两步过程,包括:
- 定义一个bean
- 注入豆子
请参阅和依赖项注入是一个两步过程,包括:
- 定义一个bean
- 注入豆子
StudentInfo
是否是原型并不重要。实际上,您正在使用new
操作符实例化StudentInfo
,如:
return new StudentInfo("girraj1","gupta1");
实际的bean定义是您创建的工厂方法,您有两个这样的bean
因此,换句话说,当您注入一个实际上是StudentInfo
实例的bean时,您不会注入StudentInfo
,而是注入一个名为student或student1的bean,比如:
@Qualifier("student1")
@Autowired
private StudentInfo studentInfo;
学生1,学生他们可能都是单身
这里如果StudentInfo类是原型
StudentInfo
是否是原型并不重要。实际上,您正在使用new
操作符实例化StudentInfo
,如:
return new StudentInfo("girraj1","gupta1");
实际的bean定义是您创建的工厂方法,您有两个这样的bean
因此,换句话说,当您注入一个实际上是StudentInfo
实例的bean时,您不会注入StudentInfo
,而是注入一个名为student或student1的bean,比如:
@Qualifier("student1")
@Autowired
private StudentInfo studentInfo;
学生1,学生,他们可能都是单例。我不认为spring中有规则规定应用程序上下文必须包含单例bean。如果两个bean相等,这并不意味着单例是对的,但如果我们想要创建单例bean,并且想要限制任何主体都不允许再次创建它。我们如何在基于注释的应用程序中做到这一点呢?那么为什么不用@Component声明该类并将其留给spring呢?我不认为spring中有一条规则,即应用程序上下文必须包含singleton bean。如果两个bean相等,这并不意味着singleton是正确的,但如果我们想要创建一个singleton bean,并且想要限制任何主体都是不允许的重新创建它。我们如何在基于注释的语言中做到这一点呢?那么为什么不用@Component声明该类并将其留给springYes呢。您是对的,但是我们可以限制应用程序上下文为每个应用程序上下文只创建一个单例bean吗?这意味着如果有人尝试再次创建对象,它不应该允许,或者它将返回相同的引用。是的。您是对的,但是我们可以限制应用程序上下文为每个应用程序上下文只创建一个单例bean,这意味着如果有人尝试再次创建对象,它不应该允许,否则它将返回相同的引用。