首页 文章

Springboot @Component和@Autowired已注释,但仍然获得空指针异常

提问于
浏览
0

我仍然无法弄明白为什么我要获得NPE

foo.setName("FOOD")

这是我试图运行并面临问题的代码 .

@SpringBootApplication
public class Application {

@Autowired
private static Foo foo;


public static void main(String[] args) throws Throwable {
    SpringApplication.run(Application.class, args);
    foo.setName("FOOD");
}

}


@Component
class Foo {
private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

两个 Foo and Application 类都在同一个包中 . 我得到它的唯一方法是应用java配置 . 而不是

@Autowired
private static Foo foo;

我使用了创建实例

@Bean
private static Foo getFoo(){
  return new Foo();
}

我试图将@Componentscan添加到配置类但不起作用 . 任何的想法?谢谢!

1 回答

  • 0

    这是很好的问题,分享我的答案也很好 . 任何人都会遇到同样的困惑,这可能会有所帮助 . 我错过的是需要在 Application 类的构造函数中注入bean .

    如下修改代码不会导致空指针异常 .

    @SpringBootApplication
    public class Application {
        private static Foo foo;
    
        @Autowired
        public Application(Foo foo) {
            this.foo = foo;
        }
    
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
    
    public static void main(String[] args) throws Throwable {
        SpringApplication.run(Application.class, args);
        foo.setName("FOOD");
        System.out.println(foo.getName()); //FOOD ... console out put
    }
    }
    
    
    @Component
    class Foo {
        private String name;
    
        public String getName() {
            return name;
        }
    
    public void setName(String name) {
        this.name = name;
    }
    }
    

相关问题