由于某些原因,当我单独使用@ComponentScan 时,我的 DAO 没有加载。
我的 DAO:
@Repository
public class MyDAO{
@Autowire
private Datasource ds;
}
我的配置类(只是用嵌入式数据库覆盖数据源 bean):
@Configuration
public class TestConfig extends AppConfig {
@Bean
public Datasource getDatasource() throws Exception{...}
我的测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ComponentScan
public class MyDAOTest {
@Autowired
private MyDAO target;
我的理解是@ComponentScan 应该能够找到 MyDAO 并加载它(TestConfig 类中的数据源加载得很好)。但是,未加载 MyDAO。我收到“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为 [com.acme.dao.MyDAO] 的符合条件的 bean 以获取依赖项。”我还尝试在 @ComponentScan 中指定包,例如 com.acme 或 com.acme.dao。
当我将 MyDAO.class 作为类之一包含在 @ContextConfiguration 中时,它工作正常。但是,我不想列出我的集成测试的所有类...
最佳答案
以下设置将从 AppConfig 加载默认 bean,同时覆盖 TestConfig 中指定的任何 bean。 TestConfig 可以是一个嵌套类(在 MyDAOTest 中),只要它被声明为静态即可。
@ContextConfiguration( classes = TestConfig.class )
@RunWith(SpringJUnit4ClassRunner.class)
public class MyDAOTest {
...
}
@Import(AppConfig.class)
public class TestConfig {
@Bean public Datasource getDatasource() throws Exception {...}
}
@Configuration
@ComponentScan( basePackages = {"com.acme"})
public class AppConfig {
....
}
关于java - Spring Integration 测试加载注解 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30625394/