Java 在Spring上下文中承载类范围内的数据
我正在编写一个spring引导组件/服务,它采用复合结构,丰富它,并将其转换为不同的复合结构 合成代码示例:Java 在Spring上下文中承载类范围内的数据,java,spring,spring-boot,Java,Spring,Spring Boot,我正在编写一个spring引导组件/服务,它采用复合结构,丰富它,并将其转换为不同的复合结构 合成代码示例: @Component public class Enricher { private final ExternalCache cache; public Result enrich(Request req) { Result result = new Result(); result.setLayers(req.getAllLevels(
@Component
public class Enricher {
private final ExternalCache cache;
public Result enrich(Request req) {
Result result = new Result();
result.setLayers(req.getAllLevels().forEach(level -> toLayer(level)));
return result;
}
private Layer toLayer(Level level) {
Layer layer = new Layer();
layer.setLevels(level.getAllSubLevels().forEach(subLevel -> toSubLayer(subLevel)));
return layer;
}
private SubLayer toSubLayer(SubLevel subLevel) {
// Need a property of the original request here!
SubLayer subLayer = new SubLayer(cache.get(requestId));
// ... Applying other logic to SubLayer here ...
return subLayer;
}
}
为了创建子层,我需要请求实例的属性。因为每个spring组件定义为单例,所以它不应该持有任何请求状态。
因此,如果我想使用请求的属性,我必须执行以下操作之一:
有没有一种方法可以优雅地解决这个问题?
因为每个spring组件在定义上都是单例组件,所以它不能保存状态。
我本能地认为单例组件可以比任何其他类型的beanBTW更好地保存状态,我会通过调用堆栈传播它。根据所需属性的数量,您可能希望创建一个maintainable@YassinHajaj澄清了我关于单身和州的声明。10倍用于指出它。关于传播,正如我所说,它会起作用,但它非常麻烦。创建参数对象将使事情更加复杂。当然,问题已经很复杂了,拥有一个复杂但可维护的解决方案是没有问题的。顺便说一句,如果您的问题在这里没有得到回答,您也可以在CodeReviewStackExchange上试试运气,如果您为他们提供了一段您想要实现的代码