com.project.api.graphql.service.GraphQLService 中构造函数的参数 0 需要一个无法找到的类型为"java.lang.String"的 bean



我是Spring Boot的新手,我想知道这个错误消息。

我正在尝试创建一个GraphQL类来连接到各种GraphQL配置,并且我想将一个值传递给构造函数(对于我的类路径,最终(:

public class ArticleResource {
@Autowired
GraphQLService graphQLService = new GraphQLService("classpath:articles.graphql");
... other code
}
public class GraphQLService {
public GraphQLService(String value) {
System.out.println(value);
}
... other code with @Autowired & @PostConstruct annotations
}

我使用了一个如何将GraphQL连接到Spring Boot的示例,我有几个地方使用了注释@Autowired和@PostConstruct。我觉得其中一个导致了我所看到的问题。

完整错误如下:

Description:
Parameter 0 of constructor in com.project.api.graphql.service.GraphQLService required a bean of type 'java.lang.String' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:
Consider defining a bean of type 'java.lang.String' in your configuration.

我该如何解决这个问题?我不能将自定义构造函数与Autowired或PostConstruct注释一起使用吗?

就像评论中提到的michalk一样,您在ArticleResource中滥用了依赖项注入——我强烈建议您阅读这里的spring文档。

基本上就是这样:在本例中,您试图满足的依赖项GraphQLService有一个构造函数,其中有一个String类型的参数。Spring将尝试注入它,但由于在您的项目中没有定义类型为String的@Bean,所以它将失败,并显示您提供的错误消息。

在您的情况下,更有意义的是定义一个@Configuration类,并从application.properties中注入String值,如下所示:

@Configuration
public class GraphQLConfig {
@Bean
public GraphQLService graphQLService(@Value("${classpath.value}") String valueReadFromAppProperties) {
return new GraphQLService(valueReadFromAppProperties);
}
}

然后将以下内容添加到应用程序中。属性文件:

classpath.value=classpath:articles.graphql

最后,在ArticleResource中注入服务实例时:

public class ArticleResource {
@Autowired
GraphQLService graphQLService;
... other code
}

尽管它可以通过使用构造函数注入而不是字段注入来改进:

public class ArticleResource {
private GraphQLService graphQLService;
public ArticleResource(GraphQLService graphQLService) {
this.graphQLService = graphQLService;
}
}

首先介绍一些关于依赖注入的信息。如果你使用Spring DI(依赖注入(,永远不要使用new关键字来创建你的"依赖注入"的实例;豆;依赖关系。让我们为您处理Spring。另一个建议是使用有用的名字。名称";值";不好,因为价值可以是一切。命名所有内容,使其具有有意义的名称。

您给出的代码示例不完整。GraphQLService类中可能有一个@Service注释。因为Spring试图在启动时启动te服务bean。因为您在该类的构造函数中定义了一个String,Spring尝试自动连接该依赖关系。一个简单的字符串不是一个已知的bean,因此您会得到错误。

请阅读Spring文档,了解其工作原理。也许还可以查看spring数据,阅读文档并查看一些示例。这为您提供了一个很好的概述,说明如何使用Spring解决这类问题。

相关内容

  • 没有找到相关文章

最新更新