当前位置: 首页 > 知识库问答 >
问题:

@自动连线对象为空[重复]

弘烨烁
2023-03-14

我试图在MessageBoxDAO类中自动连接jdbctemplate(我想它工作得很好),然后我在控制器中创建自动连接的DAO对象来获取最新的ID,以防止获取重复的ID,并从它结束的地方开始。

代码如下:

@Component
public class MessageBoxDAO {

    @Autowired
    JdbcTemplate jdbcTemplate;

...

    public long getLatestID() {
        return jdbcTemplate.queryForObject("SELECT id FROM messages ORDER BY id DESC LIMIT 1", Integer.class);
    }
}
@RestController
public class MessageBoxController {

    @Autowired
    MessageBoxDAO dao;

    private final AtomicLong counter = new AtomicLong(dao.getLatestID());

...
}

由于我未知的原因,“dao”为空,因此无法构造计数器,程序停止

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.CRUD.MessageBoxController]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "com.example.CRUD.MessageBoxDAO.getLatestID()" because "this.dao" is null

我刚接触spring boot,我知道这可能是一个非常简单的问题,但有人能指出我错在哪里吗?

共有2个答案

谷隐水
2023-03-14

计数器是MessageBoxController的成员变量。Spring使用反射构造MessageBoxController实例。它将在dao的依赖注入之前初始化。更多详细信息可在此处找到:https://stackoverflow.com/a/49443630/6644123
我们可以尝试重写计数器的初始化时间。示例可能类似于以下代码:

@RestController
public class MessageBoxController {
    @Autowired
    MessageBoxDAO dao;

    private final AtomicLong counter = new AtomicLong(0);

    @PostConstruct
    public void initialize() {
        // initialize counter after dependency injection of dao
        counter.set(dao.getLatestID());
    }
...
}

苍志文
2023-03-14

您面临的问题是由于以下对象的初始化

private final AtomicLong counter = new AtomicLong(dao.getLatestID());

您已经自动连接了MessageBoxDAO依赖项,该依赖项在执行上述指令时未初始化。您应该在实例化过程完成后初始化计数器,或者使用构造注入。

 类似资料:
  • 问题内容: 我在将环境连接到Spring项目时遇到问题。在这个班上 环境始终为null。 问题答案: 自动装配发生的时间比所谓的晚(由于某种原因)。 一种解决方法是实现并依赖Spring调用方法:

  • 以下代码在isValid()函数内的teamResource自动连线对象上生成null: 团队资源类: 如果相关的话。。。 到底为什么teamResources是null? 它没有在任何其他地方用new显式初始化。

  • 我在RMI服务中的@autowired对象上收到一个空指针异常。我创建了一个简单的(我认为)服务,可以通过RMI从客户端调用。代码如下 heartbeat-servlet.xml代码如下: 我的指定组件扫描的WebConfiguration文件如下: My HeartbeatImpl.java在包中com.edvs.service所以应该扫描它,并且应该实例化@autowyah HostStatu

  • 我正在使用spring boot创建一个后端应用程序,其用户使用JWT进行身份验证。 当我验证用户的jwt(使用过滤器)时,我将其内容解析为一个名为“身份验证”的对象,其中包含用户的id、名称、角色... 在用用户数据创建这个对象之后,我自动连接它,以便将它用于任何类(服务、控制器…) 大多数时候,我对它没有问题。但有时我发现这个对象包含另一个用户的信息。 我认为每个用户都可以访问包含其信息的对象

  • 我正在努力学习一本书名为《SpringMVC初学者指南》的书,我一直在努力创建存储库对象。我不断地得到一个BeanCreationException。不知道我还错过了什么。我想知道是否有人能帮我解决这个问题。 请在下面找到我的代码。谢谢 BeanCreationException XML文件: ProductCrontroller: 产品存储库: InMemoryProductRepository