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