有没有办法更改传递给自定义
@Qualifier
的值,并将其传递给委托@Qualifier
?
我知道我们可以通过
创建自定义限定符@Qualifier
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Van {
String value() default "";
}
以下代码会将值“green”传递给
@Qualifier
并自动装配一个名为“green”的 Vehicle
bean。
@Autowired
@Van("green")
Vehicle vehicle;
假设我有
Vehicle
beans,名称为“greenVehicle”和“redVehicle”。
有没有办法格式化传入
@Van("green")
的值并自动装配“greenVehicle”Vehicle
bean,即在场景后面有 @Qualifier("greenVehicle")
?
假设你有界面
public interface Vehicle {
// some methods
}
及其实施
public class VehicleImpl implements Vehicle {
// some methods impl
}
您的自定义限定符应该是
@Qualifier
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Van {
@AliasFor(annotation = Qualifier.class, attribute = "value")
String value() default "";
}
然后你可以创建
Vehicle
beans,例如:
@Bean("green")
Vehicle vehicle() {
return new VehicleImpl();
}
或者喜欢:
@Bean
Vehicle green() {
return new VehicleImpl();
}
并按照您的预期自动装配:
@Van("green")
@Autowired
Vehicle vehicle;