自动装配在spring boot中返回null

时间:2018-05-17 16:03:51

标签: java spring

以下是应用程序中错误为

的任何指针
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@SpringBootApplication
public class SpringAutoWApplication {

public static void main(String[] args) {
    SpringApplication.run(SpringAutoWApplication.class, args);
    DestClass dc = new DestClass();
    dc.showTestWired();
  }
}



import org.springframework.beans.factory.annotation.Autowired;
@Component
public class DestClass {

@Autowired
private TestWired testWired;

public void showTestWired() {
    System.out.println(testWired.getTestInt());
}

}

要自动装配的类

import org.springframework.stereotype.Component;


 @Component
public class TestWired {

 int testInt = 234;

public int getTestInt() {
    return testInt;
}

public void setTestInt(int testInt) {
    this.testInt = testInt;
}
}

错误:
    线程" main"中的例外情况显示java.lang.NullPointerException        在DestClass.showTestWired(DestClass.java:13)

我试图调用print的行,int返回空指针异常

答案:经过几个小时的回顾这是它的工作方式,因为我无法发布我的答案我在这里做了

public class SpringAutoWApplication {
public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringAutoWApplication.class, args);
    DestClass dc = context.getBean(DestClass.class);
    dc.showTestWired();
 }

}

1 个答案:

答案 0 :(得分:1)

Autowire仅适用于spring bean。

你的DestClass不是豆子。因此没有自动发生,@ Autowire没有效果。

DestClass标记为@Component即可:

@Component
public class DestClass {

此外,您初始化自己的实例,而不是从spring bean获取,因此您的测试bean为null:

   DestClass dc = new DestClass();

而是在DestClass课程中自动装配SpringAutoWApplication

@Autowired
DestClass dc;

最后它可以测试如下:

@SpringBootApplication
public class SpringAutoWApplication {

 @Bean
 String test(DestClass dc) {
    dc.showTestWired();
    return "work";
 }

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