在Spring Web应用程序中,我必须在应用程序中的另一个spring类中使用来自请求对象的特定值。值是请求特定值。
在下面的示例中,是每次注册来自请求正文的值并使用@Autowired
和@RequestScope
注释在另一个春天使用值的好方法(例如@Service)类?通过RequestScopedType
为每个请求注册BeanFactory
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()
)?
答案 0 :(得分:0)
你不必做beanFactory.getBean(RequestScopedType.class)
。您只需将其自动装配@Autowired RequestScopedType requestScopedType
即可。
不要忘记将bean的范围更改为Request。
@Component
@Scope(scopeName = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestScopedType {
但这引出了另一个问题,为什么过于复杂化,为什么不能将inboundPayload.getType()
传递给serviceClass.methodToCall();
?
什么阻止您以这种方式使用return serviceClass.methodToCall(inboundPayload.getType());