Java 我可以基于枚举来限定注入吗?

Java 我可以基于枚举来限定注入吗?,java,spring,enums,spring-3,Java,Spring,Enums,Spring 3,我们有一些遗留代码,我正试图找出一种清理方法。我想到的一个解决方案是,也许我可以根据给定的枚举值注入一个自定义处理程序。我可以基于枚举来限定注入吗?我想可能是这样的(伪代码) 我认为这行不通 首先,a的值是一个字符串,而不是枚举[]。而且,它只是建议为该服务类注册的bean的名称 相反,我认为您可能需要使用的是。因此,您可以选择: @Service @Qualifier("foo") public class FooHandler implements IHandler { ... } @Se

我们有一些遗留代码,我正试图找出一种清理方法。我想到的一个解决方案是,也许我可以根据给定的枚举值注入一个自定义处理程序。我可以基于枚举来限定注入吗?我想可能是这样的(伪代码)


我认为这行不通

首先,a的
是一个
字符串
,而不是
枚举[]
。而且,它只是建议为该服务类注册的bean的名称

相反,我认为您可能需要使用的是。因此,您可以选择:

@Service
@Qualifier("foo")
public class FooHandler implements IHandler { ... }

@Service
@Qualifier("bar")
public class BarHandler implements IHandler { ... }

@Component
public class MyThing {
    @Autowired @Qualifier("foo")
    private IHandler handler;

    ...
}
或者,您可以创建自己的自定义限定符注释,如:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Qualifier
public @interface MyQualifier { ... }

@Service
@MyQualifier
public class FooHandler implements IHandler { ... }

@Component
public class MyClass {
    @Autowired @MyQualifier
    private IHandler handler;

    ...
}

有关更多详细信息,请参阅。

好的,您可以尝试创建自己的验证(是的,即使使用枚举),然后提供自己的BeanPostProcessor,该处理器将执行此任务并将值注入注释字段


有很多Spring BeanPostProcessor,因此您可以通过浏览Spring的源代码来了解它是如何完成的。

并不是真的建议
@Service
参数是一个枚举,这就是为什么我说“伪代码”,我不确定我要查找的代码是什么。您可以从下面的链接中找到自定义限定符的示例(部分:使用Java配置的value()方法的自定义限定符)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Qualifier
public @interface MyQualifier { ... }

@Service
@MyQualifier
public class FooHandler implements IHandler { ... }

@Component
public class MyClass {
    @Autowired @MyQualifier
    private IHandler handler;

    ...
}