Guice injetar com base no valor da anotação

Gostaria de usar goolge / guice injetar um valor com base em uma classe que forneço com a anotação.

Anotação AutoConfig

@BindingAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER, ElementType.FIELD })
public @interface AutoConfig {
    // default null not possible
    Class<? extends Provider<? extends ConfigLoader<?>>> provider() default XMLAutoConfigProvider.class;
}

Esta é minha anotação que permite configurar o tipo de configuração, que deve ser usado para os campos anotados.

Caso:

@AutoConfig()
ConfigLoader<?> defaultConfig;

@AutoConfig(provider = JsonConfigProvider)
ConfigLoader<?> jsonConfig;

Eu quero ter duas configurações, uma padrão / xml e uma json. Provavelmente nunca ocorrerão na mesma classe ao mesmo tempo. Mas eu não sei quando um ou outro é usado. Eu usei a abordagem com uma classe porque eles são fornecidos por algumas dependências / libs e essa anotação será usada para alguns submódulos (plugáveis).

MyGuiceModule

public class MyGuiceModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(new TypeLiteral<ConfigLoader<?>>() {})
            .annotatedWith(AutoConfig.class)
            .toProvider(autoConfig.provider());
    }
}

Esta é a parte crítica, eu simplesmente não consigo imaginar como implementá-lo.

Então, basicamente, eu só quero usar a classe de provedor especificada na anotação. Não é necessário usar a classe do provedor aqui também. Porque autoConfig.provider (). NewInstance () é basicamente tudo que eu preciso. (Preciso usar um setter na nova instância, mas é tudo o que quero fazer neste local)

Para resumir, tudo o que realmente quero é enviar a anotação (ou seus valores para o provedor) usando o get (AutoConfig autoConfig) ou no construtor. Atualmente, apenas uso o construtor para injetar o valor configFile que desejo definir na instância de configuração recém-gerada.

questionAnswers(2)

yourAnswerToTheQuestion