情況描述
有個Server類,成員變量是spring中自動管理的bean類對象
public class Server {
@Autowired
private CommandMapper commandMapper;
@Autowired
private DevicesMapper devicesMapper;
...
原本我是打算在spring boot運行過程中,后台自動開啟這個服務(在application類中的main方法中開啟)
public class NongyeApplication {
/*@Autowired
private static CommandMapper commandMapper;
@Autowired
private static DevicesMapper devicesMapper;*/
public static void main(String[] args) {
SpringApplication.run(NongyeApplication.class, args);
new Server().start();
}
}
但是測試過程中,發現Server類中的那些自動裝載的bean類對象為null,原因是因為我使用了new關鍵字類創建對象
解決方法
spring boot中,有個接口ApplicationRunner,當spring boot應用啟動完畢之后會回調此接口,可以使用此接口自動完成某些任務。
所以,我們想要開啟服務的話,可以實現此接口。
我們得把Server類標記注解@Server
@Service
public class Server {
@Autowired
private CommandMapper commandMapper;
@Autowired
private DevicesMapper devicesMapper;
...
之后寫一個類,去實現ApplicationRunner接口,這樣便成功解決了。
@Component
public class TcpService implements ApplicationRunner {
@Autowired
private Server server;
@Override
public void run(ApplicationArguments args) throws Exception {
server.start();
}
}
