2010-12-29 3 views
24

대부분의 시간을 파이썬으로 프로그래밍하는데,이 문제에 대한 접근 방식이 짧다면 용서해주십시오.파이썬과 같은 자바 장식 자?

로그인 자격 증명이 필요한 특정 메소드를 갖고 싶습니다. 간단히 말해 각 메소드는 클래스 변수 user이 설정되어 있는지 확인해야합니다. 그렇다면 계속 진행하십시오. 그렇지 않으면 "로그인해야합니다"라는 메시지가 나옵니다.

파이썬에서는이 작업을 위해 데코레이터를 작성합니다. 가능한 한 적은 중복 코드로 java에서 동일한 작업을 어떻게 수행 할 수 있습니까?

감사합니다!

+1

이 질문에 대한 답변을 살펴볼 수도 있습니다. http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-Decorating –

답변

12

Java에서이 문제를 해결하는 한 가지 방법은 Aspect-oriented programming 도구를 사용하는 것입니다. 그러한 도구 중 하나는 AspectJ입니다. 이런 종류의 문제는 AOP에 동기를 부여하기 위해 일반적으로 사용되는 예제라는 것을 알게 될 것입니다.

AOP는이 특정 문제를 해결할 수있는 상당히 중량있는 방법 일 수 있으므로 각 방법에 적절한 검사를 추가하기 만하면됩니다. 네이티브 Java에서 파이썬의 데코레이터와 직접적으로 동일한 것은 없습니다.

+0

답해 주셔서 감사합니다. 나는 이것과 비슷한 많은 다른 이슈들을 가지고 있기 때문에 너무 '헤비급'이 아닐 수도있다. 나는 AspectJ와 Guice를 살펴볼 것이다. – awegawef

8

가장 간단한 방법은 "assertCredentials"와 같은 메서드를 작성하고 해당 메서드를 자격 증명이 필요한 모든 메서드의 시작 부분에서 호출하는 것입니다. 증명서가 설정되어 있지 않은 경우, 메소드는 부모 메소드를 중단시키는 예외를 throw해야합니다.

자바에는 메서드 등을 장식하는 데 사용할 수있는 주석이 있지만이 경우 주석을 사용하면 사물을 단순화 할 수 있다고 생각하지 않습니다.

-2

bean validation framework을 조사해야합니다.

+0

콩 검증이 도움이된다고 생각지 않습니다. 1) 다른 방법은 자격 증명을 필요로하지 않으므로 자격 증명이없는 개체를 "유효하지 않은"것으로 취급 할 수 없습니다. 2) 유효성 확인 프레임 워크는 객체가 항상 유효하다는 것을 보장하지 않습니다. 당신은 "validate"방법을 호출해야합니다 ... –

6

AspectJ와 같은 AOP 프레임 워크보다 상대적으로 가벼운 Google Guice AOP을 시도 할 수 있습니다.