Java Spring服务bean为空
我有一个简单的Spring启动应用程序,可以初始化CLI游戏 导入com.rpg.game.rpggame.client.RpgGameClientJava 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
@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);
}
}