Весенние введения с динамической реализацией - PullRequest
0 голосов
/ 23 февраля 2009

Я пытаюсь использовать Spring Framework для динамической реализации определенного интерфейса (давайте назовем его I) для класса (пусть назовем его C). Весной это называется ввод (миксин на других языках). Во время компиляции C не реализует I. Используя аннотацию @DeclareParents, я могу сделать это в синтаксисе AspectJ.

Проблема в том, что фактическая реализация I (давайте назовем его IImpl) является автономной (не зависящей от контекста) - я должен указывать только имя класса IImpl в аннотации. Чего я хочу добиться, так это реализации, которая каким-то образом предусмотрена. Например, я хотел бы предоставить экземпляру IImpl параметр, скажем, включающий экземпляр C, чтобы логика в IImpl была разной в зависимости от того, какой экземпляр C я представляю. Мне нужен какой-то способ установить зависимость между экземпляром IImpl и введенным экземпляром C.

В настоящее время я не могу найти способ сделать это. Есть идеи?

Спасибо.

1 Ответ

2 голосов
/ 23 февраля 2009

Боюсь, что «форма» решения, которое вы ищете, невозможна, поскольку ткач AJ (не важно, компилируется ли он или загружается), должен знать, как «реализовать» ваши методы. Но я думаю, что может быть решение вашего вопроса в форме делегата. По сути, вы скажете C для реализации интерфейса I с использованием IImpl и использования IImpl в качестве делегатора, что означает, что IImpl будет делегировать все вызовы методов IRuntimeImpl, которые можно настроить / изменить во время выполнения. IImpl в основном будет:

public class IImpl implements I {
    private I delegate;

    public void interfaceMethod() {
        delegate.interfaceMethod()
    }
}

Во время выполнения вы сможете перейти к IImpl независимо от того, какую реализацию вы выберете для I.

. / Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...