问题描述
我有一个类,以下类为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的项目。
updateRouteName
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());
}
}
package rscope;
import io.micronaut.runtime.http.scope.RequestScope;
@RequestScope
public class DemoBean {
public DemoBean() {
}
public int getBeanIdentity() {
return System.identityHashCode(this);
}
}