我是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解决这类问题。