我需要从另一个模块注册一些配置 bean。这是我所拥有的:
@Configuration
public class MyConfiguration {
@Bean
public FirstConfig(CustomManager manager, CustomContext context) {
return manager.get(FirstConfig.class, context);
}
@Bean
public SecondConfig(CustomManager manager, CustomContext context) {
return manager.get(SecondConfig.class, context);
}
@Bean
public ThirdConfig(CustomManager manager, CustomContext context) {
return manager.get(ThirdConfig.class, context);
}
// some other beans
}
上面的代码工作得很好,但是正如你所看到的,有很多样板代码。所以我正在考虑创建一个自定义注释来简化这一点。类似的东西:
@Configuration
@EnableConfigBeans({FirstConfig.class, SecondConfig.class, ThirdConfig.class})
public class MyConfiguration {
// some other beans
}
我采用的方法是使用 @Import
并实现接口 ImportBeanDefinitionRegistrar
public class CustomBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar
并像这样定义我的注释:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({CustomBeanDefinitionRegistrar.class})
public @interface EnableConfigBeans {
Class<?>[] value();
}
但是,我无法在 CustomManager
中自动装配 CustomContext
或 CustomBeanDefinitionRegistrar
,因为这些 bean 在那个阶段还没有准备好使用。
有人可以就如何实现此功能给我一些建议吗?谢谢