Spring:为静态属性注入bean时出现NullPointerException

时间:2018-04-30 12:30:20

标签: java spring dependency-injection static spring-java-config

我的主要课程如下:

package main;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import testbean.MySpringBeanWithDependency;

public class Main {

    public static MySpringBeanWithDependency mySpringBeanWithDependency;

    @Autowired
    public void setTest(MySpringBeanWithDependency mySpringBeanWithDependency) {
        Main.mySpringBeanWithDependency = mySpringBeanWithDependency;
    }

    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        mySpringBeanWithDependency.run();
    }

}

我的AppConfig类如下:

package main;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import testbean.MySpringBeanWithDependency;
import writer.NiceWriter;
import writer.Writer;

@PropertySource("atm.properties")
@Configuration
public class AppConfig {

    @Bean
    public MySpringBeanWithDependency mySpringBeanWithDependency() {
        return new MySpringBeanWithDependency();
    }

    @Bean
    public Writer writer() {
        return new Writer();
    }

    @Bean 
    public NiceWriter niceWriter() {
        return new NiceWriter();
    }

}

虽然我正在实例化名为mySpringBeanWithDependency的bean并将其分配给静态字段,但run()方法命令正在抛出NullPointerException。

我看到这个解决方法是在一些答案中注入静态字段,但我想这对我不起作用。有人可以指出我哪里出错了,我该怎么做?

1 个答案:

答案 0 :(得分:1)

Main不是bean,也不是实例化的。我确信可能有一种方法可以将bean注入到静态字段中,但是在需要时从应用程序上下文中获取bean会更有意义:

public static void main(String[] args) {
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    MySpringBeanWithDependency bean = context.getBean(MySpringBeanWithDependency.class);
    bean.run();
}