2010-01-15 12 views
5

Özel bir ClassLoader kullanarak çalışma zamanında bazı (proxy) sınıfları üreten bir Java çerçevesiyle çalışıyorum. Özel ClassLoader öğesinin loadClass (..) 'dan bu sınıfa karşılık gelen ham bayt dizisinden döndürdüğü herhangi bir sınıfı almak istiyorum. Mümkün mü? Bir sınıf bir kaynak olarak mevcutsa, sınıfı bir ikili biçimde yüklemek için bir girdi akışı kullanabilirsiniz, ancak sınıf çalışma zamanında üretilirse bunu nasıl yapabilirim?Çalışma zamanında oluşturulan bir sınıf için baytları alın

+0

Özel sınıf yükleyicinin kaynağına erişiminiz yok mu? – stacker

cevap

2

bir ClassFileTransformer kaydedin. Baytları değiştirmek yerine, ihtiyacınız olan verileri kaydedin.

+1

Evet, aslında birkaç hafta önce bunu yapıyorduk. İşe yarıyor. – user66237

3

Özel ClassLoader'ı kendi başınıza değiştirirseniz, ham baytları kendiniz kaydetmek için bazı mekanizmalar ekleyebilirsiniz.

0

ClassLoader'daki sınıflar defineClass() yöntemi tarafından oluşturulur. Zaten bir özel sınıf yükleyiciniz varsa, tüm defineClass() yöntemlerini geçersiz kılabilirsiniz. Bu yönteme, sınıfın baytlarını içeren bir bayt [] geçirilir. Bunları saklayın ve daha sonra bunlara erişmek için uygulamanıza ihtiyaç duyabilirsiniz.

Daha fazla bilgi için [defineClass() Java Dokümantasyonu] [1] konusuna bakın.

[1]: http://java.sun.com/javase/6/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String, bayt [], int int)

+0

Tüm defineClass yöntemleri kesindir. –

İlgili konular