2010-12-29 6 views
24

Ich verbringe den größten Teil meiner Zeit mit der Programmierung in Python, also vergib mir, wenn mein Ansatz für dieses Problem kurz ist:Python-ähnliche Dekoratoren in Java?

Ich möchte bestimmte Methoden einer Klasse erfordern Anmeldeinformationen. Einfach gesagt, sollte jede Methode prüfen, ob die Klassenvariable user gesetzt ist, und wenn ja, weitermachen, aber wenn nicht, spucke eine Nachricht "Sie müssen sich anmelden" aus.

In Python würde ich einfach einen Dekorateur schreiben, um dies zu tun. Wie kann ich dasselbe in Java mit so wenig redundantem Code wie möglich erreichen?

Danke!

+1

Sie könnten auch einen Blick auf die Antwort auf diese Frage nehmen: http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-decorating –

Antwort

12

Eine Möglichkeit, dies in Java zu lösen, ist die Verwendung eines Aspect-oriented programming Tools. Ein solches Werkzeug ist AspectJ. Sie werden wahrscheinlich feststellen, dass diese Art von Problem ein Beispiel ist, das häufig verwendet wird, um AOP zu motivieren.

AOP könnte eine ziemlich schwergewichtige Möglichkeit sein, dieses spezielle Problem zu lösen, so dass Sie vielleicht untersuchen möchten, ob Sie jeder Methode entsprechende Prüfungen hinzufügen. Es gibt keine direkte Entsprechung zu Pythons Dekoratoren in Java.

+0

Danke für die Antwort. Ich habe viele andere ähnliche Probleme, daher ist es vielleicht nicht zu schwer. Ich werde sowohl auf AspectJ als auch auf Guice eingehen. – awegawef

8

Am einfachsten ist es, eine Methode wie "assertCredentials" zu schreiben und diese Methode am Anfang jeder Methode aufzurufen, die Anmeldeinformationen benötigt. Wenn Anmeldeinformationen nicht festgelegt sind, sollte die Methode eine Ausnahme auslösen, wodurch die übergeordnete Methode abgebrochen wird.

Java hat Anmerkungen, die verwendet werden können, um Methoden usw. zu dekorieren, aber ich denke nicht, dass die Verwendung von Anmerkungen in diesem Fall die Dinge vereinfachen würde.

-2

Sie sollten in bean validation framework suchen.

+0

Ich glaube nicht, Bean-Validierung hilft. 1) Es wird vorausgesetzt, dass für andere Methoden keine Anmeldeinformationen erforderlich sind. Daher können Sie ein Objekt ohne Anmeldeinformationen nicht als "ungültig" behandeln. 2) Das Validierungs-Framework garantiert nicht, dass Objekte trotzdem immer gültig sind. Sie müssen die "validate" -Methode aufrufen ... –

6

Sie können versuchen Google Guice AOP, die relativ leichter als AOP-Framework wie AspectJ ist.

Verwandte Themen