2010-08-12 14 views

उत्तर

25

जावा कोड को संकलित करता है पढ़ें। बाइटकोड इंजेक्शन Foo.class को रनटाइम पर संशोधित कर रहा है ताकि इसे लोड और चलाने से ठीक पहले कोड में इंजेक्ट किया जा सके।

एक परिदृश्य की कल्पना कीजिए जहां मैं पता लगाने के लिए कितनी बार विधि

public void bar(); 

Foo.class में शुरू हो जाती है चाहता हूँ। मैं तो उस वर्ग लोड होने के दौरान Foo.class को बीच में रोक java.lang.instrument का उपयोग कर एक एजेंट लिख सकता है यह ASM का उपयोग कर संशोधित करता है ताकि bar() कॉल com.amir.agent.incrementCount() विधि प्रवेश पर।

$java -javagent:MyAgent Foo //assuming Foo has a main() defined 

और रनटाइम पर, Foo.class न केवल अपने सामान्य कार्य है, यह भी काम करते हो जाएगी होगा मैं MyAgent में हर बार bar() शुरू हो जाती है परिभाषित:

अब मैं अपने कार्यक्रम चला सकते हैं।

खरोंच से एक एजेंट के लेखन पर एक सूचक के लिए, here शुरू करते हैं।

1

अपने प्रश्न के दूसरे भाग को संबोधित करने के लिए। मैं इसका उपयोग करता हूं क्योंकि मैं आलसी हूं और नहीं चाहता कि मेरे आधे (कामकाजी) जीवन लेखन गेटर्स और सेटर्स लिखें। इसके बजाय मैंने अपनी कक्षा परिभाषा से पहले एक टिप्पणी @ डेटा रखा और सबकुछ किया गया।

Project Lombok पर 3 मिनट के वीडियो प्रदर्शन देखें।

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