Другой вариант - использовать BeanDefinitionRegistryPostProcessor
и зарегистрировать ваши классы вручную.
@Configuration
@ConditionalOnClass({
LegacyBeansAutoConfiguration.Legacy1.class,
LegacyBeansAutoConfiguration.Legacy2.class,
LegacyBeansAutoConfiguration.Legacy3.class
})
@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class)
public class LegacyBeansAutoConfiguration implements
BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
RootBeanDefinition beanDefinition1 = new RootBeanDefinition(Legacy1.class, Legacy1::new);
beanDefinitionRegistry.registerBeanDefinition(Legacy1.class.getName(), beanDefinition1);
RootBeanDefinition beanDefinition2 = new RootBeanDefinition(Legacy2.class, Legacy2::new);
beanDefinitionRegistry.registerBeanDefinition(Legacy2.class.getName(), beanDefinition2);
RootBeanDefinition beanDefinition3 = new RootBeanDefinition(Legacy3.class, Legacy3::new);
beanDefinitionRegistry.registerBeanDefinition(Legacy3.class.getName(), beanDefinition3);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
// n00p
}
class Legacy1 {
}
class Legacy2 {
}
class Legacy3 {
}
}
Вот тест, подтверждающий, что бобы зарегистрированы:
@RunWith(SpringRunner.class)
@SpringBootTest
public class LegacyBeansAutoConfigurationTest {
@Autowired
ApplicationContext context;
@Test
public void contextLoads() {
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy1.class)).isNotNull();
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy2.class)).isNotNull();
Assertions.assertThat(context.getBeanNamesForType(LegacyBeansAutoConfiguration.Legacy3.class)).isNotNull();
}
}