Mam kilka prostych interfejsów z programami pobierającymi i ustawiającymi oraz kilka innych metod do odczytu i zapisu z systemu plików. Używając bezpośrednio kodu Java, mógłbym napisać pojedynczą "procedurę wywoływania" i użyć jej do utworzenia instancji obiektów dla wszystkich tych interfejsów (nie próbowałem tego, ale myślę, że można to zrobić).Implementuje interfejs Java za pomocą Spring (AOP?)
Zastanawiam się, czy można zrobić to samo za pomocą Spring.
Poniższy kod implementuje dany interfejs. Jak łatwo zauważyć, ten sam program obsługi wywołania może być użyty dla dowolnego interfejsu.
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class AOPTester {
public static void main(String[] args) {
InvocationHandler handler = new MyInvocationHandler();
AnyInterface proxy = (AnyInterface) Proxy.newProxyInstance(
AnyInterface.class.getClassLoader(),
new Class[] { AnyInterface.class },
handler);
proxy.sayHello();
}
}
interface AnyInterface {
public void sayHello();
}
class MyInvocationHandler implements InvocationHandler{
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("Hello!");
return null;
}
}
Coś podobnego tutaj: [http://stackoverflow.com/questions/34133189/mongodb-dao-sets-all-attributes-to-null-before-save/34160666 ? noredirect = 1] (http://stackoverflow.com/questions/34133189/mongodb-dao-sets-all-attributes-to-null-before-save/34160666?noredirect=1) – Valijon
Przepraszam, @Valijon, I nie rozumiem, dlaczego ten adres URL powinien być w jakiś sposób powiązany z tym, co muszę zrobić. –
'Interfejsy' nie wykonują żadnej logiki, wystarczy zdefiniować umowę interfejsu usługi.Najpierw musisz zdefiniować implementację interfejsu w kodzie Java. Następnie, jeśli nie chcesz zainicjować tej implementacji kilka razy, możesz pobrać 'singleton' z kontekstu. W tym łączu znajduje się kilka interfejsów, takich jak 'Dao',' MongoOperations ', w których implementacja jest odzyskiwana z kontekstu. Wiosna pomaga ci inicjować klasy, a nie definiować składnię implementacji (w jaki sposób skompilowałaby się w kod bajtowy?). – Valijon