2012-02-12 4 views
6

Tôi sẽ bắt đầu với một đoạn mãChú mà gọi một phương pháp

class Clazz { 

    public void doSomething() { 
     ... 
     check(); 
    } 

    public void doSomethingElse() { 
     ... 
     check(); 
    } 

    ... // etc., these methods look basically the same - they all call check() at the end 
} 

Có thể chú thích các phương pháp như @Checked đó sẽ gây ra để gọi check() ở cuối? Và nếu có, bạn có thể cung cấp một số ví dụ không?

+1

Không thể dễ dàng. Nhưng câu hỏi đặt ra là: bạn sẽ đạt được điều gì ngoại trừ sự nhầm lẫn? –

+0

@JBNizet Tôi chỉ muốn biết nếu nó có thể và nếu tôi không học cái gì mới. Vấn đề thực tế của tôi phức tạp hơn nhiều và tôi hy vọng rằng tôi có thể đơn giản hóa nó với điều này. – user219882

Trả lời

6

Vâng - điều đó là có thể. Bạn cần phải cụ mã của bạn, thường là với các khía cạnh (AOP). Hãy xem this example nếu bạn muốn xem nó trông như thế nào.

+0

Câu trả lời của bạn không chính xác, 'gọi phương thức của bạn' sẽ chỉ được thực hiện khi bạn phản ánh lớp học chứ không phải khi phương thức được gọi. Bạn có thể sử dụng Thiết bị đo đạc cho mục đích này (https://github.com/jboss-javassist/javassist) hoặc bọc mã của bạn theo các phương thức đã tạo (https://github.com/square/javapoet ví dụ) – Spoke44

+0

@ Spoke44 you ' lại đúng. Tôi nghĩ tôi phải hiểu lầm câu hỏi. Tôi không chắc tại sao nó được chấp nhận và nhận được nhiều lợi ích hơn câu trả lời đúng. – javamonkey79

3

Có thể thực hiện với AOP. Hãy xem AspectJ và Dynamic Proxy. Sử dụng proxy động, bạn có thể gói lớp của mình bằng một đoạn mã khác để thực hiện một số điều trước và sau khi thực hiện cuộc gọi phương thức.

+0

Bạn vui lòng chia sẻ một số ví dụ hoặc liên kết về cách thức này có thể đạt được bằng cách sử dụng AspectJ/Dynamic Proxy? –

+0

@KiranAB, chỉ dành cho bạn http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – AlexR