当我们调用Bean是单例的新Bean()时会发生什么?

时间:2018-06-01 10:54:30

标签: java spring javabeans

嗨所有这些可能是重复的问题,对不起,但我无法找到该帖子。

问题: - 假设有一个以这种方式编写的A类

  @Component
  public class A{}

现在当我打电话给A a = new A()两次它会不会给我提供相同的对象? 这可能是一个愚蠢的问题,但请您详细澄清一下吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

当您在示例中调用A = new A()时,您将始终获得一个新实例,因为A未实现为单例类。

它被作为@Component进行anotated这一事实只会影响该类在spring上下文中实例化,而一个用= new()实例化的变量(有异常,但让我们概括)不在春天上下文。

如果你想拥有相同的bean,你应该用@Autowired实例化变量“a”,方法如下:

@Autowired
private A a;

另请注意,@ Autowired只有当前类在spring上下文中时才会起作用(你没有使用= new(...)实例化它。)

答案 1 :(得分:1)

首先,这个是Singleton类示例,您无法使用来自类外部的new关键字对其进行实例化,因为您的构造函数是私有的。

 class MySingleton
{
    static MySingleton instance = null;
    public int x = 10;

    // private constructor can't be accessed outside the class
    private MySingleton() {  }

    // Factory method to provide the users with instances
    static public MySingleton getInstance()
    {
        if (instance == null)        
             instance = new MySingleton();

        return instance;
    } 
}

其次,您可以在here中找到有关Bean的大量信息,例如,您需要使用@Bean注释创建bean。

此外,您可以查看此post