猿问

为什么在我的 bean 中调用 @Autowired 字段返回 null?

我从 class 创建了一个 bean Driver。当从它自己的方法访问该 bean 内部的@Autowire字段wait时,一切正常,但是当我wait直接在 bean 内部调用时,driver.wait我得到NullPointerException. 有人可以解释为什么会这样吗?


public class Driver{


    @Autowire 

    public MyWait wait;


    public void waitForIt(){

        this.wait.doStuff();

    }

}



@Component

@Lazy

public class MyWait{


    public void doStuff(){

        doingStuff();

    }

}



@Configuration

@Scope("cucumber-glue")

@ComponentScan(basePackages = {"utilities"})

@Lazy

public class SpringConfig {


    @Bean

    @Lazy

    public Driver getDriver() {

        return new Driver();

    }

}



@ContextConfiguration(classes = SpringConfig.class)

public Steps{


    @Autowire

    @Lazy

    Driver driver;


    public void waitForX(){

    driver.waitForIt(); <- works fine

    driver.wait.doStuff(); <- java.lang.NullPointerException on wait field

}


倚天杖
浏览 177回答 1
1回答

慕莱坞森

因为您正在driver.wait使用字段引用访问该字段。Spring auto-wire 基于生成的代理,这些代理应用于方法,尤其是当某些 bean 是@Lazy.&nbsp;根据文档:除了用于组件初始化之外,您还可以将注解放置在标有或@Lazy的注入点上。在这种情况下,它会导致延迟解析代理的注入。@Autowired@Inject假设有相应的getWait()方法,下面应该可以工作:driver.getWait().doStuff()
随时随地看视频慕课网APP

相关分类

Java
我要回答