Spring @Autowired是否为每个bean创建参数的新实例?

时间:2019-04-16 13:38:37

标签: java spring spring-boot autowired

  

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,并且都接受相同的对象类型:ApiKeysDatabaseBanwareDatabase

在这些*Database类中有一些缓存和其他与实例相关的内容,所以我想知道:创建两个上述REST控制器时,将它们的{{1} }和apiKeysDb字段分别相等(分别持有banwareDbApiKeysDatabase对象的相同实例)?也就是说,

BanwareDatabase

1 个答案:

答案 0 :(得分:1)

这取决于bean的类型,默认范围是单例,因此在这种情况下,不会,它不会创建一个新实例,但是会使用相同的实例。

您可以使用@Scope批注来更改bean的范围。