嗨所有这些可能是重复的问题,对不起,但我无法找到该帖子。
问题: - 假设有一个以这种方式编写的A类
@Component
public class A{}
现在当我打电话给A a = new A()两次它会不会给我提供相同的对象? 这可能是一个愚蠢的问题,但请您详细澄清一下吗?
谢谢,
答案 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