2010-12-29 30 views
24

Tôi dành hầu hết thời gian lập trình bằng Python, vì vậy hãy tha thứ cho tôi nếu cách tiếp cận của tôi đối với vấn đề này là ngắn:Trình trang trí giống như Python trong Java?

Tôi muốn có một số phương thức nhất định yêu cầu thông tin đăng nhập. Đơn giản, mỗi phương pháp nên kiểm tra xem biến lớp user có được đặt hay không và nếu có, tiếp tục, nhưng nếu không, hãy nhổ ra thông báo "bạn cần đăng nhập".

Trong Python, tôi chỉ viết một trình trang trí để thực hiện việc này. Làm thế nào tôi có thể thực hiện điều tương tự trong java với ít mã dự phòng nhất có thể?

Cảm ơn!

+1

Bạn cũng có thể xem câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/2541554/java-method-missing-ala-ruby-for-decorating –

Trả lời

12

Một cách để giải quyết điều này trong Java là sử dụng công cụ Aspect-oriented programming. Một công cụ như vậy là AspectJ. Có thể bạn sẽ thấy rằng loại vấn đề này là một ví dụ thường được sử dụng để thúc đẩy AOP.

AOP có thể là một cách khá nặng để giải quyết vấn đề cụ thể này, vì vậy bạn có thể muốn khám phá chỉ cần thêm các kiểm tra thích hợp cho từng phương pháp. Không có bất kỳ tương đương trực tiếp nào với các trình trang trí của Python trong Java nguyên gốc.

+0

Cảm ơn câu trả lời. Tôi có rất nhiều vấn đề khác tương tự như vấn đề này, vì vậy nó có thể không quá 'nặng'. Tôi sẽ xem xét AspectJ cũng như Guice. – awegawef

8

Điều đơn giản nhất cần làm là viết một phương thức như "assertCredentials" và gọi phương thức đó ở đầu mỗi phương thức cần thông tin xác thực. Nếu thông tin đăng nhập không được đặt, phương thức sẽ ném một ngoại lệ, sẽ hủy bỏ phương thức gốc.

Java có chú thích có thể được sử dụng để trang trí các phương pháp, v.v. nhưng tôi không nghĩ rằng việc sử dụng chú thích trong trường hợp này sẽ đơn giản hóa mọi thứ.

-2

Bạn nên xem xét bean validation framework.

+0

Tôi không nghĩ rằng xác nhận đậu giúp. 1) Nó ngụ ý rằng các phương pháp khác không yêu cầu thông tin đăng nhập, vì vậy bạn không thể xử lý một đối tượng mà không có thông tin đăng nhập là "không hợp lệ". 2) Khung xác nhận không đảm bảo rằng các đối tượng luôn hợp lệ. Bạn phải gọi phương thức "xác thực" ... –

6

Bạn có thể thử Google Guice AOP tương đối nhẹ hơn khung AOP như AspectJ.

Các vấn đề liên quan