Spring使用自定义注解注册bean

时间:2021-01-29 21:17:10

标签: java spring spring-boot configuration annotations

我需要从另一个模块注册一些配置 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 中自动装配 CustomContextCustomBeanDefinitionRegistrar,因为这些 bean 在那个阶段还没有准备好使用。

有人可以就如何实现此功能给我一些建议吗?谢谢

0 个答案:

没有答案