Java Yansıması oldukça güçlüdür ve çok yararlı olabilir. Java Yansıma , derleme sırasında sınıfların, yöntemlerin vb. Adlarını bilmeden, çalışma zamanında sınıfları, arabirimleri, alanları ve yöntemleri denetlemeyi mümkün kılar . Yansıma kullanarak yeni nesneleri başlatmak, yöntemleri çağırmak ve alan değerlerini almak / ayarlamak da mümkündür .
Yansımayı kullanmanın neye benzediğini gösteren hızlı bir Java Yansıtma örneği:
Method[] methods = MyObject.class.getMethods();
for(Method method : methods){
System.out.println("method = " + method.getName());
}
Bu örnek, Class nesnesini MyObject adlı sınıftan alır. Sınıf nesnesini kullanarak örnek, o sınıftaki yöntemlerin bir listesini alır, yöntemleri yineler ve adlarını yazdırır.
Tüm bunların nasıl çalıştığı burada açıklanmaktadır
Edit : Neredeyse 1 yıl sonra ben yansıma hakkında okurken Yansıma daha az kullanır var gibi bu cevabı düzenliyorum.
- Yay, aşağıdaki gibi fasulye yapılandırmasını kullanır:
<bean id="someID" class="com.example.Foo">
<property name="someField" value="someValue" />
</bean>
Spring bağlamı bu <bean> öğesini işlediğinde, Class.forName (String) öğesini, bu Sınıfı başlatmak için "com.example.Foo" bağımsız değişkeniyle kullanır.
Daha sonra <property> öğesi için uygun ayarlayıcıyı almak ve değerini belirtilen değere ayarlamak için tekrar yansıma kullanır.
- Junit, Reflection'ı özellikle Özel / Korumalı yöntemleri test etmek için kullanır.
Özel yöntemler için,
Method method = targetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
Özel alanlar için,
Field field = targetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);