如何在Spring-Boot中启动Main-Class?

时间:2018-03-17 11:34:11

标签: java spring spring-boot

我想执行一个非常简单的例子来解释Spring-Boot中的IoC概念。

为此,我创建了一个Bean,它将@Autowired转换为一个main-class,它有一个方法可以对bean执行某些操作。

豆子:

enter image description here

主要:

@Component
public class MyMain {

    @Autowired
    private MyBean bean1;

    public void usingTheBean()
    {
        bean1.setName("Thats my first bean!");
        bean1.setAttribute("And thats just an attribute");

        System.out.println(bean1);
    }
    public static void main(String[] args) {
        //MyMain main = new MyMain();
        //main.usingTheBean();
    }
}

我的SpringBootApplication:

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        MyMain main = new MyMain();
        main.usingTheBean();
    }
}

如何启动Main-class?没有得到

java.lang.NullPointerException 

主要的@Autowired Bean“MyBean”?

我知道NullPointer-Exception的原因是我使用“new”关键字创建了Main类。

但问题更多地集中在“如何使用spring-boot启动主类”这个问题

1 个答案:

答案 0 :(得分:2)

通常,您不希望直接使用上下文来自己创建bean。您应该让上下文初始化,然后只使用自动装配的bean。最有可能的是,你解决这个问题的方式与实现它的Spring方式截然不同。

您应该看一下以下示例:

  • 使用CommandLineRunner接口(请参阅here)或
  • 使用InitializingBean接口(请参阅here

或者,您可以通过配置解决此问题:

@Configuration
public class MyConfig {

  @Bean
  public MyBean myBean() {
    MyBean bean = new MyBean();
    bean.setName("...");
    bean.setAttribute("...");
    return bean;
  }
}

然后您可以简单地使用

@Autowired
MyBean myBean;

自动装配它。

另一种替代方法是从配置文件(例如application.properties)中注入值,如果在您的情况下可以这样做:

@Component
public class MyBean {

  @Value("${my.config.value}")
  private String name;

  @Value("${my.config.attribute}")
  private String attribute;

  public MyBean(){

  }
...

在application.properties中包含以下条目:

my.config.value = Some value content
my.config.attribute = Some attribute content