为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要加载 WebMvcConfigurer?

为什么要加载 WebMvcConfigurer?

www说 2021-06-01 04:15:05
我是 Spring 的新手,正在使用 Postgresql/JPA 和 MongoDB 组件测试 Spring Data 项目。我的测试类有以下注释:@SpringBootApplication@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = {SpringMongoConfig.class, PgRepository.class, MongodbRepository.class})public class PerfTest {  @Autowired  private PgRepository pgRepo;  @Autowired  private MongodbRepository mongoRep;出于某种原因,spring-context模块试图WebMvcConfigurer在解析 bean 类时加载,给我一个NoClassDefFoundError.Spring Boot Autoconfigure 是否尝试启动完整的 Web 控制器套件?如果是这样,为什么?我真的只是对 Spring Data 感兴趣。我应该完全避免 Spring Boot 吗?
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

您不应该将测试类注释为@SpringBootApplication. 此注释用于在主代码库中定义一个类,该类包含一个 main() 方法,用于通过自动配置启动 Spring boot 容器。


如果它是您有兴趣测试的 Spring 数据,那么您的测试将需要指向一个@Configuration用@EnableJpaRepositories此注释的类,这将允许您的存储库接口自动装配。


我不知道您的 SpringMongoConfig 类中有什么,但是如果它包含该注释,那么您需要做的就是:


@RunWith(SpringRunner.class)

@ContextConfiguration(classes = {SpringMongoConfig.class})

public class PerfTest {

如果没有,那么您需要设置此配置并将其包含在@ContextConfiguration测试中。


另一个更重量级但可以保证所有内容都可用于您的测试的选项(假设您的 Spring boot 应用程序设置正确)是标记您的测试,@SpringBootTest这将自动加载应用程序的整个 Spring boot 上下文。如果找不到您的主类,您可以通过在注释中提供该类来将其指向正确的方向:


@RunWith(SpringRunner.class)

@SpringBootTest(classes = MyMainClass.class)

public class PerfTest {


查看完整回答
反对 回复 2021-06-02
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您需要将@Component添加到您的存储库界面。Spring首先加载组件类,然后@AutoWiring & 变量的初始化将发生。


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 279 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信