javaspring@Service泛型:我需要为每种类型创建一个bean吗?
我正在尝试创建一个通用crud服务,可以用于任何类型的实体。但当我尝试它的时候,我注意到,即使我是自动连接的,也有几种不同的服务,比如
@Autowired
MyService<Item> itemService;
@Autowired
MyService<Students> studentsService;
当我试着做这件事的时候。findAll()方法我注意到它正在返回项。。两种服务都有!所以在做了一些调试之后,我注意到itemService和studentsService的实例是相同的,这可以解释我刚才提到的内容
为了确保这一点,我做了一些小测试,如下所示:
@Autowired
Foo<String> fooStr;
@Autowired
Foo<Long> fooLong;
static int counter = 0;
@Service
class Foo <T> {
public Foo(){
counter++;
}
}
@EventListener(ApplicationReadyEvent.class)
public void doSomethingAfterStartup() {
System.out.println("hello world, I have just started up " + counter);
}
基本上,我设置了一个通用的foo服务,并在我假设的两个不同实例(foo和foo)下自动连接它,并在构造函数上设置一个计数器来检查这个类被实例化了多少次。然而,不是counter=2(一个来自fooStr,另一个来自愚弄),而是1,我想这证实了我之前的假设
所以我的问题是:如果我使用@Service,我真的需要为每种类型的泛型声明一个bean吗?难道没有更简单的方法吗?我必须为一个几乎相同的项目制作大量的CRUD,因此如果可能的话,我真的希望避免为每个实体类型声明所有bean
# 1 楼答案
默认情况下}注释
Service
是一个单例。为了每次都获得一个新实例,请使用 ^Service
类上的{