gpt4 book ai didi

spring - 使用 Spring 直接连接一个具体的类

转载 作者:行者123 更新时间:2023-12-04 05:26:42 24 4
gpt4 key购买 nike

在 Spring 中使用 @Autowired 直接连接到具体类而不是接口(interface)是否有意义(并使用“按类型”自动连接)

如果一个类没有实现接口(interface),最好通过构造函数或工厂实例化它(保持简单);而不是仅仅为了它而让它成为一个 Spring bean。

最佳答案

Does it makes sense in Spring to use @Autowired to wire directly to a concrete class and not to an interface



当然。 Autowiring 的做法与您正在 Autowiring 的内容无关。它将与类以及接口(interface)一起使用。

然而,这是否是一个好主意是有争议的,尽管这是一个更普遍的问题,即是否应该始终为给定类引入接口(interface),而不是直接与类类型对话。好处包括更容易的单元测试和更简洁的设计,但代价是代码困惑。

Autowiring 接口(interface)类型而不是类类型还有另一个很好的理由,那就是如果 Spring 需要在注入(inject) bean 之前围绕 bean 生成代理对象,那么如果 bean 的类定义了任何接口(interface),那么代理将实现这些接口(interface),并将与 bean 类本身类型不兼容。如果您然后尝试按类类型 Autowiring 该 bean,它将失败。避免这种烦人情况的最简单方法是始终按接口(interface)类型 Autowiring ,这样它就会始终按您的预期工作。

and make use of 'by type' autowiring



如果你的意思是 container-level byType autowiring ,那么你不想这样做。这是旧的 Spring 1.x Autowiring 风格,而且非常不灵活(参见 limitations of autowiring )。

坚持 @Autowired ,它更灵活,更容易控制。

If a class doesn't implements an interface wouldn't it be better to instantiate it via constructor or a factory (keeping things simple); rather than make it a Spring bean just for the heck of it.



这两个问题是完全分开的。如果您需要 Spring 控制其依赖关系和生命周期,则无论它是否实现接口(interface),都应将对象设为 Spring bean。如果你发现对象没有依赖,也没有有意义的接口(interface),那么也许就没有理由让它成为一个 bean。

关于spring - 使用 Spring 直接连接一个具体的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com