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;
...
}