2012-03-30 8 views
1

Ich muss die Aufrufe aller Methodenaufrufe an eine Schnittstelle abfangen. Ich habe die Java Dynamic Proxies durchlaufen, aber das wird mir nicht helfen. Ich bin mir nicht einmal sicher, ob das erreicht werden kann, aber ich denke daran, es zu bestätigen.Java Die Aufrufe einer Interface-Methode abfangen

So kann im Grunde sagen, ich habe eine Schnittstelle wie folgt:

public interface Foo {   
    public String getValue(); 
} 

Ich möchte alle Anrufe zu getValue abfangen(), von welchen Implementierungen von Foo. Problem ist, dass ich keine Kontrolle über die verschiedenen Implementierungen von Foo habe, weshalb ich Dynamic Proxies nicht verwenden kann.

Gibt es eine Möglichkeit, dies zu tun?

Danke.

+0

Vielleicht, wenn Sie eine Abstract.class anstelle von Interface verwenden, können Sie eine private Methode implementieren, die von jedem Sub aufgerufen wird getValue() –

Antwort

1

AOP könnte helfen, aber wie Sie festgestellt haben, wird alles viel einfacher, wenn Sie die Objekterstellung kontrollieren (auch wenn nur durch ein DI-Framework wie Spring oder Guice).

Eine andere Alternative ist das Kompilieren von Byte-Code-Weben - das heißt, das Finden aller Implementierungen und das Ändern ihrer Implementierungen, damit sie während der Kompilierung ihren Interception-Code haben.

Eine dritte Alternative wäre die Verwendung eines Agenten oder eines benutzerdefinierten Classloaders zum Weben, wenn die Klassen in das System geladen werden. Das ist das Laden der Ladezeit. Aber wenn Sie zum Beispiel in einem Webcontainer sind, in dem Sie nicht für die Classloader verantwortlich sind, könnte dies schwierig sein.

1

Die einzige Möglichkeit, dies zu tun, wäre mit einem benutzerdefinierten Classloader, der die Implementierungsklassen durch einen Proxy ersetzt.

Es könnte möglich sein, dies out-of-the-Box mit Spring AOP 's Ladezeit Weben zu tun.

+0

Vielen Dank für Ihre Antwort. Das alles erscheint mir zu komplex für meinen kleinen Verstand. Gibt es ein einfacheres Beispiel, auf das Sie mich hinweisen könnten? – user320550

Verwandte Themen