spring boot 自動裝載對象為null問題的解決


情況描述

有個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();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM