Можете ли вы объединить @Qualifier и @AliasFor весной?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Можете ли вы объединить @Qualifier и @AliasFor весной?

Сообщение Anonymous »

Я хотел бы создать в Spring аннотацию квалификатора с несколькими атрибутами; только эта часть работает так, как ожидалось.

Кроме того, я бы хотел, чтобы «значение» и другой атрибут были псевдонимами друг друга. Для этого Spring предлагает аннотацию @AliasFor.
Могут ли они вообще сочетаться? Дело в том, что @AliasFor действительно имеет эффект, поэтому Spring явно что-то с ним делает. Но это не работает; кажется, что на самом деле он полностью нарушает квалификатор.
Ниже приведен одноклассовый пример того, как, по моему мнению, это должно работать, если оно вообще работает. @MetaQualifier определяет два атрибута — value и name — как псевдонимы друг друга.
Я объявляю компонент и квалифицирую его через значение
Я объявляю компонент и квалифицирую его через значение
Я объявляю компонент и квалифицирую его через значение
код>. Я запрашиваю компонент, квалифицированный либо по значению, либо по имени. Если псевдонимы работают, обе инъекции должны работать. Но ни то, ни другое. Я ожидал, что по крайней мере тот, который запрошен через value, будет работать.
Но теперь закомментируйте @AliasFor и инъекцию в useTestValue(...) внезапно сработало. Прокомментируйте @Bean testNamed(), и оба будут работать. (Это не приближает меня к моей цели, но это интересный эксперимент.)
Таким образом, @AliasFor явно имеет эффект, даже если это не кажется быть полезным. Добавление других случайных аннотаций не имеет никакого эффекта, поэтому этот эффект кажется уникальным для @AliasFor. Если @AliasFor не поддерживается для квалификаторов, я ожидал, что это вообще не окажет никакого эффекта или будет рассматриваться как любая другая аннотация, но это, похоже, не имеет смысла.
Есть ли способ заставить это работать или оно обречено с самого начала?
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.AliasFor;

@Configuration
public class QualiasForTestConfig
{

@Bean
@MetaQualifier(value = "qualifier")
Test testValue()
{
return new Test("value");
}

// @Bean
// @MetaQualifier(named = "qualifier")
// Test testNamed()
// {
// return new Test("named");
// }

@Bean
String usageTestValue(@MetaQualifier(value = "qualifier") Test testValue)
{
return "Yay!";
}

@Bean
String usageTestNamed(@MetaQualifier(named = "qualifier") Test testNamed)
{
return "Yay!";
}

@Target({ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
@Documented
public @interface MetaQualifier
{

@AliasFor("named")
String value() default "";

@AliasFor("value")
String named() default "";

}

static class Test
{

private final String text;

public Test(String text)
{
this.text = text;
}

@Override
public String toString()
{
return text;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-spring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»