为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2022-07-20 10:51:50
我从 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@Lazypublic class MyWait{    public void doStuff(){        doingStuff();    }}@Configuration@Scope("cucumber-glue")@ComponentScan(basePackages = {"utilities"})@Lazypublic 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}
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

因为您正在driver.wait使用字段引用访问该字段。Spring auto-wire 基于生成的代理,这些代理应用于方法,尤其是当某些 bean 是@Lazy. 根据文档

除了用于组件初始化之外,您还可以将注解放置在标有或@Lazy的注入点上。在这种情况下,它会导致延迟解析代理的注入。@Autowired@Inject

假设有相应的getWait()方法,下面应该可以工作:

driver.getWait().doStuff()


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信