2010-12-29 28 views
24

Spędzam większość czasu programowania w Pythonie, więc wybacz mi, jeśli moje podejście do tego problemu jest krótko umieszczone:Dekoratory w stylu Pythona w Javie?

Chcę mieć pewne metody klasy wymagają danych logowania. Po prostu każda metoda powinna sprawdzić, czy zmienna klasy user jest ustawiona, a jeśli tak, kontynuować, ale jeśli nie, wypluć komunikat "musisz się zalogować".

W Pythonie po prostu napiszę dekoratora, aby to zrobić. Jak mogę zrobić to samo w Javie z tak małym zbędnym kodem, jak to tylko możliwe?

Dzięki!

+1

Możesz również rzucić okiem na odpowiedź na to pytanie: http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-decorating –

Odpowiedz

12

Jednym ze sposobów rozwiązania tego problemu w Javie jest użycie narzędzia Aspect-oriented programming. Jednym z takich narzędzi jest AspectJ. Prawdopodobnie okaże się, że ten typ problemu jest przykładem, który jest powszechnie stosowany do motywowania AOP.

AOP może być dość ciężkim sposobem rozwiązania tego konkretnego problemu, więc możesz chcieć zbadać, dodając odpowiednie sprawdzenia do każdej metody. Nie ma żadnego bezpośredniego odpowiednika dla dekoratorów Pythona w macierzystej Javie.

+0

Dzięki za odpowiedź. Mam wiele innych problemów podobnych do tego, więc może nie być zbyt "ciężki". Zajrzę do AspectJ oraz Guice. – awegawef

8

Najprostszą rzeczą do zrobienia jest napisanie metody jak "assertCredentials" i wywołanie tej metody na początku każdej metody, która wymaga poświadczeń. Jeśli poświadczenia nie są ustawione, metoda powinna wygenerować wyjątek, który przerwie metodę nadrzędną.

Java ma adnotacje, które można wykorzystać do dekoracji metod itp., Ale nie sądzę, aby stosowanie adnotacji w tym przypadku uprościło sprawę.

-2

Powinieneś zajrzeć do bean validation framework.

+0

Nie uważam, że sprawdzanie poprawności fasoli pomaga. 1) Sugeruje się, że inne metody nie wymagają poświadczeń, więc nie można traktować obiektu bez poświadczeń jako "nieważnych". 2) Ramy walidacji nie gwarantują, że obiekty są i tak ważne. Musisz zadzwonić do metody "sprawdzania poprawności" ... –

6

Możesz wypróbować Google Guice AOP, który jest relatywnie bardziej lekki niż framework AOP, taki jak AspectJ.