gpt4 book ai didi

java - 使用 DI 的类只能通过 DI 创建吗?

转载 作者:行者123 更新时间:2023-12-01 22:15:42 28 4
gpt4 key购买 nike

我正在使用 spring 制作一个 Web 应用程序,在 web.xml 中我定义了 context-param 来查找 application-context.xml 文件,该文件扫描除 Controller 之外的所有内容,而 app-servlet.xml 仅扫描 Controller 。

application-context.xml 包含数据库的数据源,我将数据源注入(inject)到 daos 中,如下所示:

@Autowired
DataSource dataSource;

现在,如果我尝试在 Controller 中手动创建 DAO(我知道我可能应该为此使用服务,但目前仅用于测试目的),我会收到空​​指针异常,但是当我注入(inject) DAO 时,它会正确加载.

那么为什么会发生这种情况呢? DAO 不由 DI 容器管理,只有数据源管理,那么为什么我不能手动创建 dao?

最佳答案

Spring bean工厂和“new”是正交的:一旦你调用“new”,它就在你的手中,而不是Spring的。

您描述的情况很常见:您希望 Spring 管理生产中的 bean 生命周期和依赖项,但在测试时您希望自己使用模拟来完成。我的建议是编写您的应用程序以使用 Spring 进行 DI 和 bean 创建,但在测试时使用构造函数来手动注入(inject)模拟。

关于java - 使用 DI 的类只能通过 DI 创建吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080913/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com