gpt4 book ai didi

java - SpringBoot : How to make generic class that is not tightly coupled to the framework?

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

前端开发人员正在开发我的第一个 Java Spring Boot API。我一直在阅读许多关于 Spring/Spring Boot 中“最佳实践”的文章,并一直在尝试重构我的代码以遵循这些实践。

下面是一个通用类的示例,我用它来处理各种服务的所有 HTTP 请求。最初我用 @Component annontation 注释了这个类。 ,但正如我提到的,我正在努力学习并遵循 Spring 的“最佳实践”。我特别有兴趣实现 this article on best practices描述(文章中的编号 3 和 4)。这就是说我们应该避免使用 @component,因为我们不想与 Spring 框架紧密耦合,并且我们希望避免“整个类路径扫描”。

@Slf4j
public class HttpService {

private HttpServletRequest request;
private RestTemplate restTemplate;

public HttpService(HttpServletRequest request, RestTemplateBuilder restTemplateBuilder) { ... }

public String get(String url, String id) { ... }
}

使用 @component 注释,我的服务按预期工作,但是当我删除它时,出现异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type

这似乎是 Java 中一个非常常见的异常,因为有很多关于它的问题,但这些解决方案对我不起作用。

我希望社区能够帮助我回答的问题分为两部分:

  1. 如何正确地使其成为一个与 Spring 不紧密耦合的可用泛型类?
  2. 这实际上是 Spring 开发的正确方法还是我对这篇文章读得太深了?

最佳答案

That says one should avoid using @Component because we don't want to be tightly coupled to the Spring framework ...

它表示我们不希望我们的域类与 Spring 紧密耦合。 HttpService(绑定(bind)到 Web 上下文并依赖于 Spring 的 RestTemplateBuilder)和 MySuperSpecificDomainCalculator(无论什么情况,它都应该保持工作)之间存在差异。它所处的上下文)。

... and we want to avoid "entire classpath scanning."

我认为使用类路径扫描没有什么极其邪恶的地方。您可以让 Spring 扫描一小组包。您可以准确指出依赖于 Spring 的类所在的位置。带有 @Bean 方法的 @Configuration 是一种替代方案,and sometimes the only one.

How do I correctly make this a useable generic class that is not tightly coupled to Spring?

您正在设计一个 Web 图层。您正在选择要使用的技术。您决定使用 Spring Web。在某些时候,您必须将 Spring 的类绑定(bind)到您的类。正如你已经做的那样。无论注释如何,HttpService 都依赖于 Spring。它采用 RestTemplateBuilder 这是一个 Spring 类。

而且没有任何问题。您需要编写此类来将框架集成到您的应用程序中并使其为您工作。只需确保 Spring 世界和您的域世界之间的界限明确即可。

Is this actually a correct approach for Spring development or am I reading too deeply into this article?

这篇文章有道理。您的 HttpService 对我来说看起来是一个有效的 @Component 。别想太多。

关于java - SpringBoot : How to make generic class that is not tightly coupled to the framework?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616117/

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