micronaut @RequestScope-不为每个传入的HTTP请求创建bean

问题描述

我有一个类,以下类为RequestScope bean:

<div class="dropdown">

这个想法是让一个对象包含整个应用程序可访问的REST请求级别的自定义数据,其范围显然应该在当前请求之内。这可以用来说..日志记录-每当开发人员从应用程序中记录任何内容时,一些请求元数据都会随之而来。

我不清楚@RequestScope bean到底是什么:

根据其定义-我的假设是为每个新的http请求创建该请求,并在该请求的生命期内共享同一实例。

Micronaut何时建造?它是一成不变的吗?

在多个请求中,我可以看到相同的 requestId (期望每个请求都有新的UUID)

@RequestScope bean是否是正确的用例?

解决方法

什么时候由Micronaut建造?

在请求处理期间(第一次需要该bean时)创建了一个type Fruit = Record<string,FruitDescription> interface FruitDescription { color: string,taste: string } bean。

这是一成不变的吗?

可能是。在编写类时,您可以决定Bean是否可变。如您的示例所述,@RequestScope是可变的。如果删除RequestContext方法,则该bean将是不可变的。

@RequestScope bean是否是正确的用例?

我不这么认为,但这确实是一个基于观点的问题。

编辑:基于以下添加的评论

查看位于https://github.com/jeffbrown/rscope的项目。

https://github.com/jeffbrown/rscope/blob/2935a4c1fc60f350198d7d3c1dbf9a7eedd333b3/src/main/java/rscope/DemoController.java

updateRouteName

https://github.com/jeffbrown/rscope/blob/2935a4c1fc60f350198d7d3c1dbf9a7eedd333b3/src/main/java/rscope/DemoBean.java

package rscope;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/")
public class DemoController {

    private final DemoBean demoBean;

    public DemoController(DemoBean demoBean) {
        this.demoBean = demoBean;
    }

    @Get("/doit")
    public String doit() {
        return String.format("Bean identity: %d",demoBean.getBeanIdentity());
    }
}

https://github.com/jeffbrown/rscope/blob/2935a4c1fc60f350198d7d3c1dbf9a7eedd333b3/src/test/java/rscope/DemoControllerTest.java

package rscope;

import io.micronaut.runtime.http.scope.RequestScope;

@RequestScope
public class DemoBean {
    public DemoBean() {
    }

    public int getBeanIdentity() {
        return System.identityHashCode(this);
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...