Spring是否为不同的bean创建相同类型的构造函数参数的新实例?
例如,我有两个REST控制器:
第一
@RestController
@RequestMapping ("/getHwidData")
public class GetHwidDataController {
private final ApiKeysDatabase apiKeysDb;
private final BanwareDatabase banwareDb;
@Autowired
public GetHwidDataController(ApiKeysDatabase apiKeysDb, BanwareDatabase banwareDb) {
this.apiKeysDb = apiKeysDb;
this.banwareDb = banwareDb;
}
}
第二:
@RestController
@RequestMapping ("/setHwidData")
public class SetHwidDataController {
private final ApiKeysDatabase apiKeysDb;
private final BanwareDatabase banwareDb;
@Autowired
public SetHwidDataController(ApiKeysDatabase apiKeysDb, BanwareDatabase banwareDb) {
this.apiKeysDb = apiKeysDb;
this.banwareDb = banwareDb;
}
}
您可能会看到,两个控制器的构造函数都是@Autowired
,并且都接受相同的对象类型:ApiKeysDatabase
和BanwareDatabase
。
在这些*Database
类中有一些缓存和其他与实例相关的内容,所以我想知道:创建两个上述REST控制器时,将它们的{{1} }和apiKeysDb
字段分别相等(分别持有banwareDb
和ApiKeysDatabase
对象的相同实例)?也就是说,
BanwareDatabase
答案 0 :(得分:1)
这取决于bean的类型,默认范围是单例,因此在这种情况下,不会,它不会创建一个新实例,但是会使用相同的实例。
您可以使用@Scope
批注来更改bean的范围。