更改传递到自定义@Qualifier的值

问题描述 投票:0回答:1

有没有办法更改传递给自定义

@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")

java spring annotations spring-annotations
1个回答
0
投票

假设你有界面

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;
© www.soinside.com 2019 - 2024. All rights reserved.