| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- OS
- 모던자바
- BOJ
- 문자열
- 최소 신장 트리
- redis
- 운영체제
- 스프링 시큐리티
- 모던 자바 인 액션
- MST
- java
- 알고리즘
- spring security
- Python
- proxy
- Deadlock
- 약수
- 백준
- Junit5
- CS
- 객체지향
- Spring
- 프록시
- 다이나믹 프록시
- test
- 파이썬
- 스프링
- 리플렉션
- 자바
- Reflection
Archives
- Today
- Total
Dev 달팽이 @_''
Java - 리플렉션(클래스 정보 수정 또는 실행) 본문
Java - 리플렉션(클래스 정보 수정 또는 실행)
Class 인스턴스 만들기
- Class.newInstance()는 deprecated 됐으므로 이제 부터는
- 생성자를 통하여 만들어야 함
//Class API를 통해서 인스턴스를 만드는 방법
Class<?> bookClass = Class.forName("org.example.Book");
Constructor<?> constructor = bookClass.getConstructor(String.class);
Book book = (Book)constructor.newInstance("myBook");
System.out.println(book);
생성자로 인스턴스 만들기
Constructor.newInstance(params)
Field에 접근하고 수정하는 방법
Book.java
public class Book {
public static String A = "A";
private String B = "B";
public Book() {
}
public Book(String b) {
B = b;
}
private void c(){
System.out.println("C");
}
public int sum(int left,int right){
return left+right;
}
}
- Field.get(object)로 가져오고
- Field.set(object,value)로 수정
- Static 필드를 가져올 때는 object가 없어도 되니까 null을 넘기면 됨
// Field에 접근하고 수정하는 방법
Field a = Book.class.getDeclaredField("A");
System.out.println(a.get(null));
a.set(null,"AAAAA");
System.out.println(a.get(null));

- Static 필드가 아니라면 특정 인스턴스가 가지고 있는 값을 가져오는 것이기 때문에 인스턴스가 필요
Field b = Book.class.getDeclaredField("B");
b.setAccessible(true);
System.out.println(b.get(book));
b.set(book,"BBBBBB");
System.out.println(b.get(book));

메소드 실행
- Object Method.invoke(object, params)를 통하여 실행
- 접근 지시자가 private인 경우 setAccessible(true)를 통하여 접근 지시자를 무시한다.
// Method 실행하는 방법
Method c = Book.class.getDeclaredMethod("c");
c.setAccessible(true);
c.invoke(book);

- parameter를 받는 함수라면 parameter의 타입을 넣어준다.
Method d = Book.class.getDeclaredMethod("sum", int.class, int.class);
int invoke = (int) d.invoke(book,1,2);
System.out.println(invoke);

'Java&Spring > 더 자바, 코드를 조작하는 다양한 방법' 카테고리의 다른 글
| Java - 프록시 패턴 (0) | 2022.01.09 |
|---|---|
| Java - 간단한 DI 프레임워크 만들기 (0) | 2022.01.09 |
| Java - 리플렉션 API(클래스 정보 조회) (0) | 2022.01.09 |
| Java - 바이트코드 조작 (0) | 2022.01.09 |
| Java - 코드 커버리지 (0) | 2022.01.07 |