Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring服务bean为空_Java_Spring_Spring Boot_Autowired - Fatal编程技术网

Java Spring服务bean为空

Java Spring服务bean为空,java,spring,spring-boot,autowired,Java,Spring,Spring Boot,Autowired,我有一个简单的Spring启动应用程序,可以初始化CLI游戏 导入com.rpg.game.rpggame.client.RpgGameClient @SpringBootApplication public class RpgGameApplication { public static void main(String[] args) { SpringApplication.run(RpgGameApplication.class, args); R

我有一个简单的Spring启动应用程序,可以初始化CLI游戏

导入com.rpg.game.rpggame.client.RpgGameClient

@SpringBootApplication
public class RpgGameApplication {

    public static void main(String[] args) {
        SpringApplication.run(RpgGameApplication.class, args);
        RpgGameClient.runGame(); 
    }
}
runGame()
使用了我的一些服务(Springbeans)

但是在使用我的服务时,我有一个
NullPointerException
,因为Spring不能成功地将它注入到我的
RpgGameClient
类中

如何解决它?

1)
RpgGameClient
未声明为bean候选。所以Spring忽略了它。
例如,可以通过使用
@Component
注释类(最简单的方法),或者通过声明一个返回类实例的
@Bean
方法来实现

2) 即使这样,它也不能仍然工作,因为
@Autowired
不适用于
静态
字段。Spring将依赖注入bean,而bean是类的实例。
我认为
runGame()
也应该是非
静态的
。对于一个bean spring来说,将所有的内容都设置为静态是没有意义的。Spring boot应用程序类也是如此

3) 构造器注入应优先于现场注入

因此应该更好:

@Component
public class RpgGameClient {

     private GameService gameService;

     public RpgGameClient(GameService gameService){
       this.gameService = gameService;
     }

     public void runGame() {
        gameService.createNewGame();
     }

}
并将Spring Boot app类更改为使用注入依赖项,例如:

@SpringBootApplication
public class RpgGameApplication {

    @Autowired
    RpgGameClient rpgGameClient;

    @PostConstruct
    public void postConstruct(){
       rpgGameClient.runGame(); 
    }

    public static void main(String[] args) {
        SpringApplication.run(RpgGameApplication.class, args);         
    }
}

您在哪里创建bean?
@SpringBootApplication
public class RpgGameApplication {

    @Autowired
    RpgGameClient rpgGameClient;

    @PostConstruct
    public void postConstruct(){
       rpgGameClient.runGame(); 
    }

    public static void main(String[] args) {
        SpringApplication.run(RpgGameApplication.class, args);         
    }
}