【问题标题】:How to set the attributes to a generic @Service class in Spring Boot?如何在 Spring Boot 中将属性设置为通用 @Service 类?
【发布时间】:2019-01-17 20:48:58
【问题描述】:

我是 Spring Boot 的新手,所以在这里提出我的基本问题。

我想构建一个通用的@Service 类,它具有定义明确的方法,甚至不需要被覆盖。

这个类唯一需要做的就是根据调用Controller 方法来调整它的属性。基本上,这个类作为一个 Job 处理程序,需要调整一些参数,以便它的方法可以执行它们应该计算的内容。该作业将始终具有相同的工作流程,以相同的顺序调用方法,但它会根据它接收到的参数/属性获得不同的结果,正如我之前所说,这些参数/属性是由控制器方法定义的。

除了调整作业工作流程的属性之外,它的唯一属性是自动连接的@Repository 对象,它将作业结果保存在数据库中。

也许我可以简单地实例化一个 Job Handler 对象并使用我需要的参数调用一个构造函数,但考虑到 Spring 如何与依赖注入和我需要一个嵌入到 Job Handler 服务中的 @Repository 对象。

如果有人可以编写示例代码/示例,我将不胜感激,这样我就可以了解如何使用 Spring Boot 完成此操作,这样我就不必重复代码或服务类。

【问题讨论】:

  • “也许我可以简单地实例化一个 Job Handler” 这绝对不是 Spring 的方式,你不应该那样做。能不能加个代码sn-p 更清楚?
  • 您可以通过尝试使用 Spring 实现依赖注入来为 SO 提出更好的问题(也可以帮助您自己)。做一些谷歌搜索,写一些代码,如果你在编码时遇到困难,把它贴在这里,这样我们就可以准确地看到你在哪里。看看how to ask a good question。 “请写一个例子”对 SO 来说不是一个好问题,因为没有正确或错误的答案。

标签: java spring-boot design-patterns


【解决方案1】:

这种情况下的 Spring 方法是创建 JobHandler 的 Bean,您可以在其中注入必要的依赖项,例如您的存储库:

@Configuration
class MyConfiguration {

    @Bean
    MyJobHandler myJobHandler(MyRepository myRepository) {
        return new MyJobHandler (myrepository);
    }

}

或者,如果您不想要配置类,您可以将 JobHandler 声明为组件并在构造函数中注入存储库:

@Component
class MyJobHandler {

    private MyRepository myRepository;

    public MyJobHandler myJobHandler(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

}

【讨论】:

  • Spring 更传统的方式是使用@Autowired 自动装配依赖项。作为私有字段或作为服务的构造函数参数。
  • 是的,完全正确。这里的存储库依赖是隐式自动装配的!
  • 我不是这个意思。典型的 spring 方式是完全依赖 @Autowired 通过组件扫描自动拾取 bean,无需通过自己的配置显式实例化它。
  • 好的,我明白你的意思了。我在答案中添加了一个示例。
猜你喜欢
  • 2019-03-04
  • 2015-12-21
  • 2018-08-26
  • 1970-01-01
  • 2019-04-02
  • 2020-08-21
  • 2019-01-03
  • 2022-11-03
  • 2023-03-31
相关资源
最近更新 更多