使用DI的课程只能通过DI创建吗?

时间:2015-06-26 19:39:04

标签: java spring spring-mvc dependency-injection

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

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

@Autowired
DataSource dataSource;

现在,如果我尝试在控制器中手动创建DAO(我知道我可能应该使用服务,但它现在仅用于测试目的)我得到空指针异常,但是当我注入时DAO它正确加载。

那么为什么会这样呢?只有数据源才能通过DI容器管理DAO,为什么不能手动创建dao?

2 个答案:

答案 0 :(得分:2)

春豆工厂和"新"是正交的:一旦你打电话给#34; new",它掌握在你手中,而不是Spring。

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

答案 1 :(得分:1)

是;不受Spring控制的对象......好吧,在Spring的控制之外。

有一些解决方法,例如,允许new ed对象获得Spring DI(例如,字节码操作)。