春季 - 通过代码每次请求注册请求范围的bean很好吗?



在Spring Web应用程序中,我必须在应用程序中其他春季类中的请求对象中使用特定值。值是请求特定值。

在下面的示例中,注册值来自 request body 并每次使用 @Autowired带有@RequestScope注释在另一个春季(例如@Service)类中使用值的好方法?通过BeanFactory为每个请求注册RequestScopedType bean值是否很好?

@RestController
@RequestMapping("/")
public class VehicleServiceController {
  @Autowired 
  private BeanFactory beanFactory;
  @Autowired 
  private ServiceClass serviceClass;
  @PostMapping(path = "/postDetails", consumes = MediaType.APPLICATION_JSON_VALUE)
  public OutputPayload postDetails(
        @RequestBody InputPayload inboundPayload) throws Exception {
    beanFactory.getBean(RequestScopedType.class).setValue(inboundPayload.getType());
    return serviceClass.methodToCall();
  }
}

负载非常巨大,会对性能产生任何影响吗?有其他方法可以注入/获取RequestBody对象值(inboundPayload.getType())?

您不必做beanFactory.getBean(RequestScopedType.class)。您只需将其自动自动化@Autowired RequestScopedType requestScopedType即可。

只是不要忘记根据请求更改bean的范围。

@Component
@Scope(scopeName = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestScopedType {

但这引出了另一个问题,为什么要使事情变得复杂,为什么不能将inboundPayload.getType()传递给serviceClass.methodToCall();

是什么阻止您使用这种方式return serviceClass.methodToCall(inboundPayload.getType());

最新更新