如何使用 Spring Boot 在控制器中注入 bean?
Posted
技术标签:
【中文标题】如何使用 Spring Boot 在控制器中注入 bean?【英文标题】:How can i inject a bean in my controller using spring boot? 【发布时间】:2019-01-18 03:50:02 【问题描述】:我尝试了@Autowired,但它不起作用。
这是我的豆子:
@Bean(name = "getModels")
public JSONObject getModels() throws ClassNotFoundException
return scannerService.getModels(Test.class , Pc.class);
还有我的控制器
@RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String getAdminParams() throws JSONException, ClassNotFoundException
ApplicationContext context = new
AnnotationConfigApplicationContext(CreateModels.class);
CreateModels createModels = (CreateModels) context.getBean("getModels");
return createModels.toString() ;
【问题讨论】:
这在很多方面都是错误的......我建议看一个简单的春季教程 你能告诉scannerService
类吗?
永远不要创建新的应用程序上下文。 准确地告诉我们您尝试了什么(使用相关代码),并准确地告诉我们它是如何不起作用的。不过,我很难理解为什么你认为这个 JSONObject 应该是一个 bean。
@Lino 对吗?我不知道从哪里开始....首先,您是否遇到任何错误? scannerService 类返回什么?为什么是bean类型JSONObject
和自动装配对象类型CreateModels
?
我有一个返回 jsonObject 的 bean,我想在我的控制器中使用这个 bean,我该怎么做?
【参考方案1】:
这可能是您应该已经创建和使用 bean 的方式:
@Service
public class ModelService // or whatever
private final ScannerService scannerService;
@Autowired
public ModelService(ScannerService scannerService)
this.scannerService = scannerService;
public JSONObject getModels() throws ClassNotFoundException
return scannerService.getModels(Test.class, Pc.class);
然后在您的控制器中,注入 ModelService
(或您提供的名称):
// your annotations
public class Controller // your name
private final ModelService modelService;
public Controller(ModelService modelService)
this.modelService = modelService;
@RequestMapping(value = "/classes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public String getAdminParams() throws JSONException, ClassNotFoundException
return modelService.getModels().toString();
这当然只是一个示例,您必须对其进行调整以适用于您当前的代码。但通常提供一个值(例如来自scannerService.getModels()
的结果)作为@Bean
是一个非常糟糕的主意。更好的解决方法是创建一个持有者对象。
【讨论】:
是的,但是我想在应用程序启动时加载我的 json 对象,这就是我将其设为 bean 的原因,并且我想在我的控制器中使用这个 jsonObject。所以每次我想使用我的 jsonObject 时发出请求并不是一个好主意【参考方案2】:我解决了
有豆子
@Bean("models")
public JSONObject getModels() throws ClassNotFoundException
return scannerService.getModels(Test.class , Pc.class);
然后我将它注入我的控制器中
@Autowired
@Qualifier("models")
JSONObject models;
【讨论】:
以上是关于如何使用 Spring Boot 在控制器中注入 bean?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中创建一个调用包含构造函数注入的服务的测试?
如何在 Spring Boot 测试中获取正在运行的服务器端口?
spring boot 测试无法注入 TestRestTemplate 和 MockMvc
多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot