有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    默认情况下Service是一个单例。为了每次都获得一个新实例,请使用 ^Service类上的{}注释