2016-05-16 4 views
5

निष्पादित करती है, मेरी विधियों में, मेरा सभी कोड एक ब्लॉक में है, कुछ शर्त का परीक्षण करता है।जावा एनोटेशन यह निर्धारित करने के लिए कि एनोटेटेड विधि

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

मैं एनोटेशन द्वारा ऐसा करने के लिए चाहते हैं - एनोटेशन अर्थ कुछ कोड है कि "तय" होगा या नहीं, विधि लागू किया जाना चाहिए पर अमल होगा।

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

क्या यह संभव है?

उत्तर

4

आप तरीकों कि अपने कस्टम एनोटेशन एनोटेट सलाह देने के लिए एक पहलू को बनाने के लिए स्प्रिंग AOP उपयोग कर सकते हैं

उदाहरण के लिए एक FilteredExecution एनोटेशन बनाने के अपने तरीकों पर निर्दिष्ट करने

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

ExecutionFilter तय करने के लिए निष्पादन

public interface ExecutionFilter{ 

    boolean sholudExecute(); 

} 

तब घटित होता है तो पहलू एक अंतरफलक है

@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 
    } 

आप अपने संदर्भ को स्थापित करने की आवश्यकता है ताकि कस्टम एनोटेशन के साथ आपके सेम ऑटो द्वारा प्रॉक्सी हो जाएं g @EnableAspectjAutoProxy आपकी कॉन्फ़िगरेशन क्लास

0

आप इसे मेट्रो के ऊपर दस्तावेज़ों को आजमा सकते हैं। यह व्याख्या प्रदर्शन के समय विधि आह्वान, और देखते हैं के दस्तावेज़ meothd

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

अगर आप इस संरचना आप प्रलेखन नहीं देख सकते हैं डाल दिया है जब आप कॉल कुछ विधि ,,

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

मेरे मामले में, यह काम करता है, मैं इस काम करता है आशा के लिए आप

+0

"विधि लागू होने पर यह एनोटेशन दिखाया गया है, और मेथड के दस्तावेज़ को देखें" वास्तव में नहीं। आप जावाडोक-टिप्पणियों के आधार पर एचटीएमएल-पेज जेनरेट कर सकते हैं, लेकिन जब "विधि लागू की जाती है" तो उन्हें "दिखाया नहीं जाता"। क्या आपका मतलब किसी भी मौके से आपके आईडीई की टूल टिप है? आपका उत्तर ओपी के सवाल से निपटता नहीं है। – Turing85

संबंधित मुद्दे