Java Reflection
Java ReflectionSpring
API
Java API Class
java.lang.Classjava.lang.reflect.Fieldjava.lang.reflect.Methodjava.lang.reflect.Constructor
-
ClassClass -
Class - API
Java
1. Class
JVM Class Class
Class<?> clazz = String.class;
String str = "Hello"; Class<?> clazz = str.getClass();
Class.forName()
Class<?> clazz = Class.forName("java.lang.String");
2.
Class<?> clazz = Class.forName("java.lang.String");
Object obj = clazz.getDeclaredConstructor().newInstance();
3.
Class<?> clazz = Person.class;
Field field = clazz.getDeclaredField("name");
field.setAccessible(true); //
Object value = field.get(personInstance); //
field.set(personInstance, "New Name"); //
4.
Class<?> clazz = Person.class;
Method method = clazz.getMethod("sayHello");
method.invoke(personInstance);
Method methodWithArgs = clazz.getMethod("greet", String.class);
methodWithArgs.invoke(personInstance, "World");
5.
Class<?> clazz = Person.class;
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object obj = constructor.newInstance("John", 30);
6.
Class<?> clazz = Person.class;
//
Class<?>[] interfaces = clazz.getInterfaces();
for (Class<?> i : interfaces) {
System.out.println("Interface: " + i.getName());
}
//
Class<?> superClass = clazz.getSuperclass();
System.out.println("Superclass: " + superClass.getName());
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Class
Class<?> clazz = Person.class;
//
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object person = constructor.newInstance("John", 30);
//
Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true);
System.out.println("Name: " + nameField.get(person));
//
nameField.set(person, "Doe");
System.out.println("Updated Name: " + nameField.get(person));
//
Method greetMethod = clazz.getMethod("greet", String.class);
greetMethod.invoke(person, "World");
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void greet(String message) {
System.out.println(name + " says: " + message);
}
}
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Class
Class<?> clazz = Person.class;
//
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object person = constructor.newInstance("John", 30);
//
Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true);
System.out.println("Name: " + nameField.get(person));
//
nameField.set(person, "Doe");
System.out.println("Updated Name: " + nameField.get(person));
//
Method greetMethod = clazz.getMethod("greet", String.class);
greetMethod.invoke(person, "World");
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void greet(String message) {
System.out.println(name + " says: " + message);
}
}
Name: John Updated Name: Doe Doe says: World
java.lang.reflect
java.lang.reflect Java API
java.lang.reflect
1. Class
getFields()getDeclaredFields()getMethods()getDeclaredMethods()getConstructors()getDeclaredConstructors()getSuperclass()getInterfaces()
2. Field
get(Object obj)set(Object obj, Object value)getType()getModifiers()publicprivate
3. Method
invoke(Object obj, Object... args)getReturnType()getParameterTypes()getModifiers()publicprivate
4. Constructor
newInstance(Object... initargs)getParameterTypes()getModifiers()publicprivate
java.lang.reflect
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Class
Class<?> clazz = Car.class;
// Car
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object car = constructor.newInstance("Toyota", 2020);
//
Field modelField = clazz.getDeclaredField("model");
Field yearField = clazz.getDeclaredField("year");
//
modelField.setAccessible(true);
yearField.setAccessible(true);
//
System.out.println("Original Model: " + modelField.get(car));
System.out.println("Original Year: " + yearField.get(car));
//
modelField.set(car, "Honda");
yearField.set(car, 2024);
//
System.out.println("Updated Model: " + modelField.get(car));
System.out.println("Updated Year: " + yearField.get(car));
//
Method startMethod = clazz.getMethod("start");
startMethod.invoke(car);
}
}
class Car {
private String model;
private int year;
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void start() {
System.out.println("The " + model + " car of year " + year + " is starting.");
}
}
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Class
Class<?> clazz = Car.class;
// Car
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
Object car = constructor.newInstance("Toyota", 2020);
//
Field modelField = clazz.getDeclaredField("model");
Field yearField = clazz.getDeclaredField("year");
//
modelField.setAccessible(true);
yearField.setAccessible(true);
//
System.out.println("Original Model: " + modelField.get(car));
System.out.println("Original Year: " + yearField.get(car));
//
modelField.set(car, "Honda");
yearField.set(car, 2024);
//
System.out.println("Updated Model: " + modelField.get(car));
System.out.println("Updated Year: " + yearField.get(car));
//
Method startMethod = clazz.getMethod("start");
startMethod.invoke(car);
}
}
class Car {
private String model;
private int year;
public Car(String model, int year) {
this.model = model;
this.year = year;
}
public void start() {
System.out.println("The " + model + " car of year " + year + " is starting.");
}
}
Original Model: Toyota Original Year: 2020 Updated Model: Honda Updated Year: 2024 The Honda car of year 2024 is starting.