我正在使用spring制作一个web应用程序,在web.xml中我定义了上下文-param来查找application-context.xml文件,该文件扫描除控制器之外的所有内容,并且app-servlet.xml只扫描控制器。
application-context.xml将数据源包含到数据库中,我将数据源注入daos中,如下所示:
@Autowired
DataSource dataSource;现在,如果我尝试在控制器中手工创建一个DAO (我知道我可能应该为此使用服务,但现在只是为了测试目的),我会得到空指针异常,但是当我注入DAO时它会正确加载。
那为什么会发生这种事?dao不是由DI容器管理的,只是数据源,所以为什么我不能手工创建dao呢?
发布于 2015-06-26 19:41:25
是的,不受Spring控制的物体是..。超出了Spring的控制范围。
有一些方法可以解决这个问题,例如,允许newed对象获得Spring (例如,字节代码操作)。
发布于 2015-06-26 19:41:57
春豆厂和“新”是正交的:一旦你称之为“新”,它就在你的手中,而不是春天的手中。
您所描述的情况很常见:您希望Spring在生产中管理bean生命周期和依赖关系,但是在测试时,您希望自己使用模拟来实现。我的建议是编写应用程序来使用Spring来创建DI和bean,但是在测试时有用于手动注入模拟的构造函数。
https://stackoverflow.com/questions/31080913
复制相似问题