当前位置: 首页 > 知识库问答 >
问题:

在spring boot rest api控制器中调用singleton类

燕禄
2023-03-14

我是spring Framework的新手。我必须使用Spring引导和Rest控制器如下:-

@RestController
public class StatisticsController {

    private TransactionCache transactionCache;

    public StatisticsController(TransactionCache transactionCache) {
        this.transactionCache = transactionCache;
    }

    @PostMapping("/tick")
    public ResponseEntity<Object> addInstrumentTransaction(@Valid @RequestBody InstrumentTransaction instrumentTransaction) {
        transactionCache.addTransaction(instrumentTransaction);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }

我有一门课必须是单人的:-

@Component
public class TransactionStatisticsCacheImpl implements TransactionCache {

    private static TransactionStatisticsCacheImpl instance;

    public static TransactionStatisticsCacheImpl getInstance(){

        if(Objects.isNull(instance)){
            synchronized (TransactionStatisticsCacheImpl.class) {
                if(Objects.isNull(instance)){
                    instance = new TransactionStatisticsCacheImpl();
                }
            }
        }

        return instance;
    }

    private TransactionStatisticsCacheImpl() {}

@RestController
public class StatisticsController {

    private TransactionCache transactionCache;

    public StatisticsController(TransactionCache transactionCache) {
        this.transactionCache = transactionCache;
    }

    @PostMapping("/tick")
    public ResponseEntity<Object> addInstrumentTransaction(@Valid @RequestBody InstrumentTransaction instrumentTransaction) {
        transactionCache.addTransaction(instrumentTransaction);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }

我们需要使用getInstance()方法调用它?另外,我们是否需要在TransactionStatisticsCacheImpl类中显式地使用getInstance方法?

共有1个答案

隆璞
2023-03-14

容器注入的一个主要优点是,您可以获得单例语义的好处,而不需要“硬”单例的所有严重问题(如困难测试)。摆脱getInstance手工业务,让Spring负责确保创建一个实例并将其用于上下文。

 类似资料:
  • 问题内容: 我想在控制器中调用视图方法,但我不知道如何:)我寻求类似的示例,但没有找到它。我可以在这段代码中这样做吗?我是否必须重新构建?我使用javafx和fxml技术(来构建用户界面)。 我的视图文件(它具有gotoRegister()和gotoLogin()方法(我想调用它们)) 我的控制器(在这里我想调用gotoRegister()方法) 我的问题:我可以调用gotoRegister吗?或

  • 我是新来的Spring应用程序。我试图创建小Spring应用程序,但我得到404错误消息。似乎控制器(indexController)没有开始调用。我累了调试,但它不在那里。 文件位置: /WebContent/WEB-INF/pages/index.html /WebContent/WEB-INF/HelloWebServlet。xml /WebContent/WEB-INF/web.xml H

  • 调用其他控制器 在控制器内直接使用 new 关键字实例化其他控制器类即可完成对其他控制器的调用 演示代码 在 index 控制器内调用 test 控制器并执行其 runme 方法 : test.php 源码 <?php class testController extends grace{ public function runme(){ echo 'run...'; } } index

  • 我正在尝试使用< code>Auth::user()- 我已经检查并包含了所需的文件,我正在从用户表中获取用户 我在调用变量并将其发布到控制器函数中的DB时遇到问题。任何帮助都可以。 将User表中的User发布到Tokens表的中,以便我可以使用模型 出现此错误: SQLSTATE[23000]:完整性约束冲突:19非空约束失败:令牌。user_id(SQL:插入“令牌”(“token1”、“t

  • 问题内容: 我是angular js的新手,目前仍然遇到非常有线的bug。控制器中的函数在按路由加载视图调用时会运行两次。 http://jsfiddle.net/4gwG3/5/ 您将看到两次警报! 我的观点很简单 我的应用程序代码如下 问题答案: 首先检查您是否没有两次初始化Angular应用程序(通过使用 ng-app 自动进行初始化)。 一次,我有2个带有ng-app的html页面(一个用

  • 问题内容: 我有一个具有自己的控制器的指令。请参见以下代码: 这旨在成为错误/通知/警告的通知系统。我想做的是从另一个控制器(不是指令控制器)调用此控制器上的函数。当我这样做时,我还希望我的链接函数检测到某些属性已更改并执行了一些动画。 这是一些代码来举例说明我要的内容: 所以打电话时开启指令控制器,链接功能也应该被触发,执行动画。我该如何实现? 问题答案: 这是一个有趣的问题,我开始考虑如何实现