Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何设置spring上下文:组件扫描到扫描;src/main/java“;而不是",;src/test.java“;单元测试环境_Xml_Spring_Unit Testing_Maven - Fatal编程技术网

Xml 如何设置spring上下文:组件扫描到扫描;src/main/java“;而不是",;src/test.java“;单元测试环境

Xml 如何设置spring上下文:组件扫描到扫描;src/main/java“;而不是",;src/test.java“;单元测试环境,xml,spring,unit-testing,maven,Xml,Spring,Unit Testing,Maven,我对spring和Maven是新手。最近我构建了SpringMVC项目,并使用maven来管理项目结构和依赖关系 当我编写单元测试时,我遇到了一个问题,那就是我无法从“src/main/java”获取bean,而上下文似乎只从“src/test/java”加载bean 这是我的密码 单元测试:src/test/java/com/web/component/form @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loca

我对spring和Maven是新手。最近我构建了SpringMVC项目,并使用maven来管理项目结构和依赖关系

当我编写单元测试时,我遇到了一个问题,那就是我无法从“src/main/java”获取bean,而上下文似乎只从“src/test/java”加载bean

这是我的密码

单元测试:src/test/java/com/web/component/form

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/applicationContext-web-test.xml"})
public class FormTest { 
    @Autowired
    private BeanFactory beanFactory; // I override this bean by myself
}
配置XML文件:src/test/resources/META-INF/spring/applicationContext-web-test.XML 下面的组件扫描似乎只扫描src/test/java中定义的bean,而不是src/main/java

<context:component-scan base-package="com.web">
    <context:exclude-filter expression=".*_Roo_.*" type="regex"/>
    <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

我想问的是,有没有办法改变元件扫描,并让它扫描src/main/java中定义的bean/类,而不是spring maven单元测试中的src/test/java?

要获得
BeanFactory
,您可以实现
BeanFactoryAware

您尝试过在test context.xml中导入正常的应用程序上下文吗?像这样:

<import resource="classpath:applicationContext.xml" /> 

不过,这可能会导致一些问题(有助于用mock轻松替换不需要的bean)

我不记得遇到过这样的问题。但是-也许组件扫描中的通配符也有类似的限制?我通常有一些基本上下文,在测试中导入,所以组件扫描设置在那里


您找到答案了吗?

正如其他人提到的,您没有在组件扫描中包含源文件夹

Maven将自动将src/test/java和src/main/java中的类添加到类路径中。按这个顺序


因此,问题可能是由于您的BeanFactory实现造成的。确保BeanFactory实现具有默认构造函数并且已成功创建。要强制排序,您可以放置@DependsOn注释(但我认为这不是问题)

Spring中的
组件扫描
机制扫描
类路径
,而不一定是目录
src/main/java
src/test/java
。你能粘贴BeanFactory的代码吗?你用
@Component
注释了BeanFactory吗?是的,我为BeanFactory添加了@Component,它看起来像普通的java bean。我在谷歌上搜索了很多,我发现我可以把“src/main/java”放在扫描路径的前面,它似乎可以工作。但我不确定这是正确的做法<代码>
No绝对不是正确的方法,因为这会将您的源代码绑定到src/main/java中,无论如何,这是不正确的,因为您的类路径不是从maven项目的根开始的!它应该像
一样简单。我仍然希望看到您对BeanFactory的实现……BeanFactoryBean只是一个例子。我需要获取在src/main/java中定义的bean,而不是src/test/java。@在这种情况下,META-INF/spring目录在引用项目根目录时位于哪里?
<import resource="classpath:applicationContext.xml" />