2016-05-16 25 views
5

Trong phương pháp của tôi hay không, tất cả mã của tôi nằm trong một khối nếu thử nghiệm một điều kiện nhất định.Chú thích Java để xác định xem phương thức chú thích có thực hiện

public void myMethod() { 
    if (/* some condition */) { 
     //do something 
    } 
} 

Tôi muốn thực hiện điều này bằng chú thích - nghĩa là chú thích sẽ thực thi một số mã sẽ "quyết định" có nên gọi phương thức hay không.

@AllowInvokeMethod(/* some parameters to decide */) 
public void myMethod() { 
    //do something (if annotation allows invokation) 
} 

Điều này có khả thi không?

Trả lời

4

bạn có thể sử dụng Spring AOP để tạo ra một khía cạnh để tư vấn phương pháp được chú thích chú thích tùy chỉnh của bạn

Ví dụ tạo chú thích FilteredExecution được quy định về phương pháp của bạn

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface FilteredExecution{ 
    Class<? extends ExecutionFilter> value(); 
} 

ExecutionFilter là một giao diện để quyết định có thực hiện nên xảy ra

public interface ExecutionFilter{ 

    boolean sholudExecute(); 

} 

Sau đó, các khía cạnh

@Aspect 
@Component 
public class FilteredExceutionAspect{ 

    @Around("@annotion(filterAnnotation)") 
    public void filter(ProceedingJoinPoint pjp , FilteredExecution filterAnnotation){ 
    boolean shouldExecute = checkShouldExecute(filterAnnotation); 
    if(shouldExecute){ 
     pjp.proceed(); 
    } 
    } 

    private boolean checkShouldExecute(FilteredExecution filterAnnotation){ 
    //use reflection to invoke the ExecutionFilter specified on filterAnnotatoon 
    } 

Bạn cần phải thiết lập bối cảnh của bạn để đậu của bạn với chú thích tùy chỉnh được tự động proxied bởi usin g @EnableAspectjAutoProxy trên lớp cấu hình của bạn

0

bạn có thể thử điều này, tài liệu ở trên metoh. chú thích này là hiển thị khi phương pháp này là gọi, và xem các tài liệu của meothd

/** 
     * descripcion of the method 
     * @param value , any value 
     */ 
    public void myMethod(String value) { 
    //do something (if annotation allows invokation) 
} 

nếu bạn đặt cấu trúc này bạn không thể xem tài liệu khi bạn gọi một số phương pháp ,,

//descripcion of the method 
    public void myMethod(String value) { 
     //do something (if annotation allows invokation) 
    } 

trong trường hợp của tôi, nó hoạt động, tôi hy vọng công trình này cho bạn

+0

"chú thích này được hiển thị khi phương thức được gọi và xem tài liệu của meothd" Không thực sự. Bạn có thể tạo các trang html dựa trên các chú thích javadoc, nhưng chúng không được "hiển thị" khi "phương thức được gọi". Bạn có nghĩa là do bất kỳ cơ hội đầu công cụ của IDE của bạn? Câu trả lời của bạn không giải quyết được câu hỏi của OP. – Turing85

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