当我们将一个类注释为@Autowired时,它是否必须是接口或它可以是一个类?

我已经看到了所有使用Spring的示例,使用一个接口,然后在一个类上实现它。然后使用接口类型在Concrete类上调用函数。我们可以不只是简单地将@Autowired添加到一个具体的类中,而不是一个接口中。

我知道该程序类似于JAVA中的接口,但是如果您不依赖于多态性,那为什么还要编写一个接口呢?

最佳答案

不,您不必使用接口,就Spring而言,这完全可以:

@Service
public class FooService {
    @Autowired
    private FooDao fooDao;
}

或者甚至可以进行建筑注射:
@Service
public class FooService {

    private final FooDao fooDao;

    public FooService(FooDao fooDao) {
        this.fooDao = fooDao;
    }
}

通常,接口是不合时宜的做法,以后的每一代都会重复进行。如果不需要,请不要使用它们。如果它们总是只有一个实现,或者您要模拟这样的类(现代模拟框架模拟类没有任何问题),则不需要它们。

注入具体的类也没有错,例如上面的示例中的FooDao。它具有一些技术意义。代理,但没有什么是无法理解的。

07-27 18:03