You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot:如何将实现接口的类转换为Bean?

当然可行!把UnitTestContextProvider转为Spring Bean的完整方案

你已经找对方向啦,你的ContextProviders配置类雏形没问题,接下来只需要补全细节,接口相关的部分Spring会帮你自动处理,不用额外操心。

1. 完善你的@Bean配置类

首先把你空的unitTestContext()方法补全,直接返回UnitTestContextProvider的实例就行:

@Configuration
public class ContextProviders {
    @Bean
    public UnitTestContextProvider unitTestContext() {
        return new UnitTestContextProvider();
    }
}

2. 关于接口的处理:Spring自动识别类型

因为UnitTestContextProvider已经实现了MockDataProvider接口,Spring会自动将这个Bean注册为同时具备两种类型的Bean:

  • 具体类型:UnitTestContextProvider
  • 接口类型:MockDataProvider

这意味着你在需要注入的时候,有两种选择:

方式一:按具体类型注入

@Autowired
private UnitTestContextProvider testContextProvider;

方式二:按接口类型注入(更推荐,符合面向接口编程)

@Autowired
private MockDataProvider mockDataProvider;

3. 多实现类场景的额外处理(可选)

如果后续你有多个MockDataProvider的实现类,Spring会不知道该注入哪个,这时候可以用@Qualifier指定Bean名称:

@Autowired
@Qualifier("unitTestContext") // 对应你@Bean方法的名称
private MockDataProvider mockDataProvider;

或者直接给@Bean指定自定义名称:

@Bean(name = "unitTestMockProvider")
public UnitTestContextProvider unitTestContext() {
    return new UnitTestContextProvider();
}

4. 在jOOQ测试中使用这个Bean(补充场景)

如果你是要在jOOQ的测试环境中使用这个Mock数据提供者,可以额外配置一个DSLContext Bean,把这个MockProvider传进去:

@Bean
public DSLContext dslContext(MockDataProvider mockDataProvider) {
    return DSL.using(new MockConnection(mockDataProvider), SQLDialect.POSTGRES);
}

这样在测试类里注入DSLContext,执行SQL时就会自动触发你的Mock逻辑啦。


内容的提问来源于stack exchange,提问作者VictorGram

火山引擎 最新活动