2016-04-06 14 views

cevap

1

Transformers (java.lang.instrument.ClassFileTransformer) public static void premain(String agentArgs, Instrumentation inst); içinde agentArgs atanan onlar Java Virtual Machine yüklenir önce bayt kod düzeyinde sınıf dosyaları dönüştürmek için kullanılır. Bu özellik, bayt düzeyindeki yöntemleri (gerçekten bayt dizisi alırsınız) veya Javassist'in daha yüksek bir modifikasyon katmanında olduğu Javassist veya ASM gibi bir üçüncü taraf kitaplığı kullanarak (kaynak kodları sağlayabilir) kullanılabilir. çalışma zamanı boyunca). ASM bayt kodu anahtar kelimelerle çalışır (ör. invokevirtual).

Yükler sırasında sınıfları ve girişleri değiştirmek, AspectJ gibi popüler Çerçeveler'de (yükleme süresi-dokuma) denilen özellikleri yükleme yeteneği sağlamak için kullanılır.


premain(...) yöntemde agentArgs parametre başlangıçta madde verilen nerede parametreleri içeren bir String olup. Maddenin kendisi tarafından ayrıştırılan tek bir String'dur.

Böyle ajan için bir tane sağlayabilir:

$ java -javaagent:${jarfile}=${agentArgs} 

Eğer ${agentArgs} olarak girdiğiniz değer agentArgs parametrenin değeri olacaktır.

Yalnızca bir bağımsız değişken içeriyorsa neden args denir? Sadece Tanrı bilir.

+0

Cevabınız için teşekkür ederiz. Lütfen agentArgs'ın ne içereceğini söyler misiniz? Demek istediğim String değerini – FAZ

+0

@FAZ Ben açıklığa kavuşturmak için cevabımı güncelledim. "$ {AgentArgs}" konumunda verdiğiniz değer, "agentArgs" parametresinin değeri olacaktır. –