gpt4 book ai didi

java - 根据请求参数 Autowiring 请求范围的 bean

转载 作者:行者123 更新时间:2023-12-01 12:00:41 25 4
gpt4 key购买 nike

在 Spring Controller 中,我可以执行以下操作:

@Controller
public class FooController {

@Autowired
private FooServiceFactory factory;

@RequestMapping("foo")
public Foo createFoo(@RequestParam String kind, @RequestParam String id) {
FooService service = factory.getFooService(kind);
return service.get(id);
}
}

现在,如果我有很多采用 kind 并以 FooService service =factory.getFooService(kind); 开头的方法,那么就很好了能够将所有逻辑移至 Controller 。

Controller 中是否还有其他地方可以访问请求参数?

是否有某种有效的方式来表达(我在这里编写语法):

private FooService service;

@Autowired
public setKind(@RequestParam String kind) {
service = factory.getFooService(kind);
}

或者是否有更好的方法来封装诸如此类的常见参数?

最佳答案

如果您使用实例变量来存储 FooService,您必须确保在实现 FooService 时考虑到线程安全。所以最好的办法是不要使用以下编码风格。

private FooService service;

@Autowired
public setKind(@RequestParam String kind) {
service = factory.getFooService(kind);
}

你能做的是;

private FooService _getFooService(String kind) {
return factory.getFooService(kind);
}

并在所有 Controller 中使用它;

@RequestMapping("foo")
public Foo createFoo(@RequestParam String kind, @RequestParam String id) {
return _getFooService(kind).get(id);
}

这样就可以消除代码重复,同时保证线程安全。

关于java - 根据请求参数 Autowiring 请求范围的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27997990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com