W bardzo dużej, starej aplikacji mam interfejsy i klasy, które wykonują , a nie implementują te interfejsy.Wiosna: Deleguj na niestandardowe opakowanie pośredniczące dla wtrysku interfejsu
Interfejsy są generowane w oparciu o klasę, więc sygnatury są takie same (z wyjątkiem tego, że interfejs dodaje inny wyjątek na wierzchu), a nazwy są podobne (więc można łatwo znaleźć nazwę klasy z nazwy interfejsu).
Aby uzyskać implementację interfejsu, wykonujemy garść protokołów przetwarzania i rejestrowania połączeń, ale zasadniczo należy użyć java.lang.reflect.Proxy
do delegowania na zajęcia. Uproszczone wygląda to tak:
// This will create a proxy and invoke handler that calls HelloWorld.doSomething
HelloWorldInterface i = MyProxyUtil.getInstance(HelloWorldInterface.class);
i.doSomething();
public interface HelloWorldInterface {
public void doSomething() throws Exception;
}
public class HelloWorld {
public void doSomething() {
//something
}
}
Czy to możliwe z przetwarzaniem Wiosna adnotacji, aby rodzajowo @Autowire
wszystkich dziedzinach typu *Interface
i wykorzystania sprężyny MyProxyUtil.getInstance(*Interface.class)
wstrzyknąć realizację?
Takie,
@Autowire HelloWorldInterface a;
HelloWorldInterface b = MyProxyUtil.getInstance(HelloWorldInterface.class);
@Autowire AnotherInterface c;
AnotherInterface d = MyProxyUtil.getInstance(AnotherInterface.class);
a == b
c == d
Przepraszam, mam trudności z ustaleniem, jak to skonfigurować? Co powinienem dodać do mojego pliku applicationContext.xml? –
@casenelson można użyć 'BeanFactoryPostprocessor' do skonfigurowania' AutowireCandidateResolver' –
Występuje problem z wtryskiem Środowiska z rozwiązaniem -> https: // github.pl/mariuszs/env-is-null – MariuszS