获取使用Java配置创建的自动连线bean的null
我正在SpringBoot中创建一个REST服务。我在配置类中创建了一个bean,并试图通过自动连接在服务类中使用,但我总是得到null,我也尝试过构造函数注入,但没有工作。下面是代码 主应用程序获取使用Java配置创建的自动连线bean的null,java,spring,spring-boot,spring-mvc,spring-restcontroller,Java,Spring,Spring Boot,Spring Mvc,Spring Restcontroller,我正在SpringBoot中创建一个REST服务。我在配置类中创建了一个bean,并试图通过自动连接在服务类中使用,但我总是得到null,我也尝试过构造函数注入,但没有工作。下面是代码 主应用程序 @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } } 休息控制器
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
休息控制器
@RestController
@RequestMapping("/v1")
public class RestController {
@Autowired
private Service service;
服务
@Service
public class ServiceImpl implements Service {
//This is the bean
@Autowired
private Record record;
public ServiceImpl() { //-----------------> tried injecting in constructor as well
System.out.println(record); //-------------------> null
}
配置类
@Configuration
public class AppConfig {
@Bean
public Record record() {
return new Record("test");
}
}
我注意到每当我从config类中删除record()时,我都会得到下面的错误
required a bean of type 'com.ns.service.Record' that could not be found
添加方法后,不会报告错误,但返回null,这间接意味着record()被视为返回所需的bean。
我找不到我做错了什么,请告诉我
项目文件夹结构
我认为你在概念上做的一切都是对的 Spring首先创建一个对象,并且仅在该对象注入值之后创建(技术上在bean后处理器中完成): 所以试试这个:
@Service
public class ServiceImpl implements Service {
//This is the bean
@Autowired
private Record record;
public ServiceImpl() {
// here the record is null - not injected yet
System.out.println(record);
}
@PostConstruct
public void checkThisOut() {
// here print the record
}
您说您也尝试过构造函数注入——它应该可以工作,因为spring必须向bean(ServiceImpl)的构造函数中注入一些东西,否则就会失败。请显示代码片段
这在某种程度上可能是错误的(尽管从您的描述中听起来不是这样的)您必须将所有@配置
/@服务
注释类放在包中,该包与使用@springbootplication
注释创建主类的包相同或位于该包的下面。它指示SpringBoot在哪里查找bean
因此,请确保您的类遵守此规则……您能提供您的项目结构吗?最好是通过扩展所有包来粘贴屏幕截图。当然,它在构造函数中是
null
。该字段只能在构造bean后进行自动连接。所以在构建对象之后,字段将被填充。@PostConstruct可以工作,甚至构造函数注入也可以工作,我可以再问一个问题吗,如果我想在构造函数中注入列表,它失败了,可能是什么问题是的,这就是我所怀疑的。向我展示你想在构造函数中注入列表的代码——考虑添加一个新问题并在这里张贴链接,这样我就可以跟踪它了。我会试着帮你…提出一个单独的问题