类的单例或组件.一定是从不同的地方打来的



我有一种情况,我需要在内存中保留一些使用春季启动的数据,这将不时更新它。我需要把它保存在一个映射中,但我有点困惑,如果我应该实现我自己的Singleton并使用组件注释。

我知道,默认情况下,对于注释组件的对象将使用单例,但在这种情况下,我必须使用从3个不同的类A, B和C.我的问题是,它会创建一个RepositoryComponent类A,另一个为B和另一个为C,每个将是单例?或者它只会为A创建一个,然后当B想要创建时,它会看到已经创建了一个,然后使用这个,然后为c创建一个。

否则我觉得我需要有我自己的单例实现

Class Repository {
Map<String, Config> db = new hashMap<>;
... singleton implementation
public String getConfig(string key) { 
return db.get(key);
}
}
@Component
Class RepositoryComponent {
Map<String, Config> db = new hashMap<>;
public String getConfig(string key) { 
return db.get(key);
}
}
@Component
Class A { 
@Autowire
RepositoryComponent c;
public someMethod() {
Repository.getInstance().getConfig("key");
c.getConfig("key");
}
}
@Component
Class B { 
@Autowire
RepositoryComponent c;
public someMethod() { 
Repository.getInstance().getConfig("key");
c.getConfig("key");
}
}
@Component
Class C { 
@Autowire
RepositoryComponent c;

public someMethod() { 
Repository.getInstance().getConfig("key");
c.getConfig("key");
}
}

如果你用@Component注释了一个类,那么在同一个ApplicationContext中只会有一个该类型的bean。这是默认行为。

如果你用@Component和@Scope("prototype")注释一个类,Spring会在每次请求时创建一个新的实例。

只创建一个RepositoryComponentbean,因为您使用的是@Component,这意味着它的作用域是Singleton。因此,将在类a、B和C中注入的对象是完全相同的(对该bean名称的所有请求将返回相同的对象,该对象被缓存)。此外,对RepositoryComponentbean的任何修改都将反映在对该bean的所有引用中。

相关内容

  • 没有找到相关文章

最新更新