java - Spring @Autowired bean 没有初始化;空指针异常

标签 java spring dependency-injection nullpointerexception autowired

目标.java:

package me;

@Component
public class Target implements Runnable {   
    @Autowired
    private Properties properties;

    public Target(){
        properties.getProperty('my.property');
    }

    public void run() {
        //do stuff
    }
}

配置.java:

@Configuration
@ComponentScan(basePackages = {"me"})
public class Config {
    @Bean(name="properties")
    public PropertiesFactoryBean properties() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new FileSystemResource("src/my.properties"));
        return bean;
    }

    public static void main(String[] argv) throws Exception {
        ApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        Target t = context.getBean(Target.class);
        t.run();
    }
}

用上面的代码。栈底:

Caused by: java.lang.NullPointerException
 at me.Target.<init>(Target.java:9)
 ....

最佳答案

你正在做现场注入(inject)。您在构造函数中引用“待 Autowiring ”实例变量。在构造函数中,properties 字段为空,因为它尚未 Autowiring 。您可以使用构造函数注入(inject)。

package me;

@Component
public class Target implements Runnable {   
    private final Properties properties;

    @Autowired
    public Target(Properties properties){
        this.properties = properties;
        properties.getProperty('my.property');
    }

    public void run() {
        //do stuff
    }
}

关于java - Spring @Autowired bean 没有初始化;空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36418606/

相关文章:

java - 访问继承的类成员时出错

c# - 依赖注入(inject)——订阅组合根而不是构造函数中的事件

java - Google Guice Web 应用程序中的 HttpSessionListener

java - Maven 项目中测试资源的公共(public)位置

dependency-injection - 将服务注入(inject) AutoMapper 目标类

java - 为什么找不到 "com.lowagie.text.rtf"?

java - 我需要保留按 "ranking"属性排序的对象集合,即使我获得了集合中已有的更多对象

Java 类 Rectangle 并使用演示类对其进行测试

java - 如何将 Spring Security 配置与 IBM Liberty Profile basicRegistry 连接

java - 如何解决在 Hibernate4 中的 ServletContext 资源中创建名称为 'sessionFactory' 的 bean 时出错的问题