Spring generi c синглтон определения бина на тип generi c - PullRequest
1 голос
/ 28 февраля 2020

Можно ли определить шаблон c bean один раз следующим образом:

@Configuration
public class TestConfiguration {

    @Bean
    public <T> EmitterProcessor<T> emitterProcessor() {
        return EmitterProcessor.create();
    }
}

, а затем иметь уникальный экземпляр для параметризованного типа T, чтобы следующий тест проходит:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class)
public class GenericBeanTest {

    @Autowired
    private EmitterProcessor<String> stringEmitterProcessor;

    @Autowired
    private EmitterProcessor<Integer> integerEmitterProcessor;

    @Test
    public void testExistsAndIsUnique() {
        assertNotNull(stringEmitterProcessor);
        assertNotNull(integerEmitterProcessor);
        assertNotSame(stringEmitterProcessor, integerEmitterProcessor);
    }
}

В настоящее время stringEmitterProcessor и integerEmitterProcessor являются одним и тем же объектом, так что последняя строка в тесте assertNotSame(stringEmitterProcessor, integerEmitterProcessor); не проходит.

Единственный другой способ, которым я мог Представьте себе, что я должен реализовать пользовательский BeanFactory, который будет делать различие на основе параметризованного типа при автопроводке по типу.

...