问题描述
我正在尝试创建可用于任何类型实体的通用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
注释