我正在使用spring创建一个Web应用程序,在web.xml中我已经定义了context-param来查找application-context.xml文件,该文件扫描除了仅扫描的控制器和app-servlet.xml之外的所有内容控制器。
application-context.xml包含数据库的数据源,我将数据源注入daos中,如下所示:
@Autowired
DataSource dataSource;
现在,如果我尝试在控制器中手动创建DAO(我知道我可能应该使用服务,但它现在仅用于测试目的)我得到空指针异常,但是当我注入时DAO它正确加载。
那么为什么会这样呢?只有数据源才能通过DI容器管理DAO,为什么不能手动创建dao?
答案 0 :(得分:2)
春豆工厂和"新"是正交的:一旦你打电话给#34; new",它掌握在你手中,而不是Spring。
您描述的情况很常见:您希望Spring在生产中管理bean生命周期和依赖关系,但在测试时,您希望自己使用模拟来完成。我的建议是编写你的应用程序以使用Spring进行DI和bean创建,但是在测试时有手动注入模拟的构造函数。
答案 1 :(得分:1)
是;不受Spring控制的对象......好吧,在Spring的控制之外。
有一些解决方法,例如,允许new
ed对象获得Spring DI(例如,字节码操作)。