Java Spring:NullPointerException在为静态属性注入bean时

Java Spring:NullPointerException在为静态属性注入bean时,java,spring,dependency-injection,static,spring-java-config,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.MySpringB

我的主要课程如下:

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();
    }

}
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();
    }

}
我的AppConfig类如下所示:

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();
    }

}
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


我在一些答案中看到了注入静态场的解决方法,但我想它对我不起作用。有人能指出我哪里出了问题,我应该如何做到这一点吗?

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

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

这不是依赖注入的工作方式。初始化静态字段是反模式的我试图避免getBean,因为我在spring文档中读到它应该被避免,它写在最后一段中,我不知道它不鼓励使用
getBean()
,谢谢你的澄清。在这种情况下,我认为这样做的方法是,初始化上下文,并用
@PostConstruct
注释
run()
方法,这意味着它在实例化时被调用。如果bean不是
Lazy
,它应该运行您的应用程序。不知道这是不是一个更好的方法,tho。