Как заставить библиотечный класс использовать ваш бин в автопроводке - PullRequest
0 голосов
/ 23 сентября 2018

Я столкнулся со сценарием в моем приложении, где я вызываю метод класса библиотеки, который использует автопроводку с аннотацией @Qualifier.В моем случае поведение точно такое же, но бин с автосвязью должен быть другим.Этот бин с автоматическим подключением просто вызывает службу REST.

Я попытался показать сценарий с несколькими простыми классами:

public interface IMessage {
    public String getMessage();
}

public class HelloMessage implements IMessage {
    public String getMessage() {
        return "Hello";
    }
}

public class HiMessage implements IMessage  {
    public String getMessage() {
        return "Hi";
    }
}

public class PrintMessage { 
    @Qualifier("helloMessage")
    @Autowired
    private IMessage message;

    public void service() {
        System.out.println(message.getMessage());
    }
}

Предположим, что все эти классы принадлежат библиотеке.Единственное, чего я пытаюсь добиться - это боб HiMessage, который будет автоматически подключен в классе PrintMessage.Переопределение этого класса было бы простым решением, но так как поведение метода service() точно такое же, поэтому я не хочу переопределять его только для использования другого автонастроенного компонента.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Например, в следующем случае необходимо предоставить квалификатор.

@Component
@Qualifier("helloMessage")
public class HelloMessage implements IMessage {
    public String getMessage() {
        return "Hello";
    }
}

Надеюсь, это поможет вам.ура!

0 голосов
/ 23 сентября 2018

В вашем классе @Configuration создайте метод, аннотированный @Bean("helloMessage"), который просто возвращает желаемый bean-компонент:

@Bean("helloMessage)"
public IMessage republishHiMessage() {
    return new HiMessage();
}

или с помощью внедрения параметра, если нужный объект уже известен как hiMessage:

@Bean("helloMessage)"
public IMessage republishHiMessage(@Qualifier("hiMessage") IMessage hiMessage) {
    return hiMessage;
}
...