在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());