Springboot @Component和@Autowired带有注释,但仍然会出现空指针异常

时间:2018-12-10 07:28:48

标签: components inversion-of-control autowired

我仍然不知道为什么我要获得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 :(得分: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;
}
}