Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果使用@bean标记创建一个bean,那么我们可以创建两个bean。每个应用程序上下文的单例数是多少_Java_Spring_Singleton - Fatal编程技术网

Java 如果使用@bean标记创建一个bean,那么我们可以创建两个bean。每个应用程序上下文的单例数是多少

Java 如果使用@bean标记创建一个bean,那么我们可以创建两个bean。每个应用程序上下文的单例数是多少,java,spring,singleton,Java,Spring,Singleton,在这里,如果StudentInfo类是prototype,那么它将创建两个单独的引用,这是可以的,但是对于singleton,它也创建了两个bean,命名student和student1,然后它打破了每个应用程序上下文的singleton规则。如果我遗漏了什么,请告诉我。在这种情况下,我们如何为每个应用程序上下文创建一个单例bean @Configuration @ComponentScan("com.spring") public class AnnotationConfiguration {

在这里,如果StudentInfo类是prototype,那么它将创建两个单独的引用,这是可以的,但是对于singleton,它也创建了两个bean,命名student和student1,然后它打破了每个应用程序上下文的singleton规则。如果我遗漏了什么,请告诉我。在这种情况下,我们如何为每个应用程序上下文创建一个单例bean

@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注释声明一个bean定义时,您将声明一个创建该bean定义所定义的类的实际实例的方法。这意味着您可以从一个配方创建多个对象实例

当JavaConfig遇到这样的方法时,它将执行该方法,并将返回值注册为SpringIOC容器中的bean

在您的示例中,您声明了两个bean定义。因此,两者都在SpringIOC容器中注册为一个单独的bean。对于单例bean,Spring将拦截对它的任何调用,并确保返回该方法生成的bean,而不是允许再次调用它


请参阅和

依赖项注入是一个两步过程,包括:

  • 定义一个bean
  • 注入豆子
当您使用@bean注释声明一个bean定义时,您将声明一个创建该bean定义所定义的类的实际实例的方法。这意味着您可以从一个配方创建多个对象实例

当JavaConfig遇到这样的方法时,它将执行该方法,并将返回值注册为SpringIOC容器中的bean

在您的示例中,您声明了两个bean定义。因此,两者都在SpringIOC容器中注册为一个单独的bean。对于单例bean,Spring将拦截对它的任何调用,并确保返回该方法生成的bean,而不是允许再次调用它

请参阅及

这里如果StudentInfo类是原型

StudentInfo
是否是原型并不重要。实际上,您正在使用
new
操作符实例化
StudentInfo
,如:

return new StudentInfo("girraj1","gupta1");
实际的bean定义是您创建的工厂方法,您有两个这样的bean

因此,换句话说,当您注入一个实际上是
StudentInfo
实例的bean时,您不会注入
StudentInfo
,而是注入一个名为studentstudent1的bean,比如:

@Qualifier("student1")
@Autowired
private StudentInfo studentInfo;
学生1,学生他们可能都是单身

这里如果StudentInfo类是原型

StudentInfo
是否是原型并不重要。实际上,您正在使用
new
操作符实例化
StudentInfo
,如:

return new StudentInfo("girraj1","gupta1");
实际的bean定义是您创建的工厂方法,您有两个这样的bean

因此,换句话说,当您注入一个实际上是
StudentInfo
实例的bean时,您不会注入
StudentInfo
,而是注入一个名为studentstudent1的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,这意味着如果有人尝试再次创建对象,它不应该允许,否则它将返回相同的引用。