Spring @Service泛型:是否需要为每种类型创建一个bean?

问题描述

我正在尝试创建可用于任何类型实体的通用Crud服务。但是当我尝试它时,我注意到即使我已经自动连线了几种不同的服务,例如

value 1 value 2 value 3
8485    2515    0
121     0       0
36      0       415
0       0       0
0       0       0
0       1551    0

当我尝试.findAll()方法时,我发现它在两个服务上都返回了项目。因此,在进行了一些调试之后,我注意到itemService和studentsService的实例相同,这将解释我刚才提到的内容

为确保这一点,我进行了一些小测试,如下所示:

@Autowired
MyService<Item> itemService;

@Autowired
MyService<Students> studentsService;

基本上,我设置了一个通用的foo服务,并在我认为应该是两个不同的实例(Foo和Foo)下自动对其进行装配,并在构造函数上使用一个计数器来检查该类实例化了多少次。但是,我认为实际上不是1而不是counter = 2(一个来自fooStr,另一个来自fooLong),证实了我以前的假设。

所以这是我的问题:如果使用@Service,我是否真的需要为每种泛型类型声明一个bean?有没有更简单的方法?我必须为一个项目做很多相同的事情,所以我很想避免必须为每种实体类型声明所有bean

解决方法

默认情况下,Service是单例。为了每次获取一个新实例,请使用 @Scope("prototype")类上的Service注释