반사를 통해 객체 작성

반사를 통해 객체를 작성하는 두 가지 방법
1. Class 바이트 객체 newInstance()를 통과합니다.(기본적으로 참조 없음으로 생성됨)
2. 구조기 getConstructor(Class>.parameterTypes)를 가져옵니다.(참고가 있는 구조기를 통해 파라미터는 구체적인 유형과 여러 개의 수량을 지정할 수 있다)
코드:
사용자 클래스 User가 있다고 가정합니다.
package test.java.zxj.test_project;

public class User {
	private String userId;
	private String name;
	
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

이때 사용자 정의 구조 파라미터가 없고 기본적인 무참구조만 있습니다.
반사를 통해 객체를 직접 작성할 수 있습니다.
package test.java.zxj.test_project;

public class TestReflection {

	public static void main(String[] args) throws Exception {
		Class> clz = Class.forName("test.java.zxj.test_project.User");
		Object object = clz.newInstance();
		System.out.println(object instanceof User);
	}

}

인쇄 결과는true입니다.
이런 clz.새 Instance () 방식으로 기본 무참구조의 대상만 만들 수 있습니다.
구조가 있는 대상은 어떻게 만듭니까?
아니면 이 User, 우리가 파라미터를 가진 구조를 더하기;
package test.java.zxj.test_project;

public class User {
	private String userId;
	private String name;
	
	public User() {
		
	}
	
	public User(String userId, String name) {
		super();
		this.userId = userId;
		this.name = name;
	}

	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

이때 우리는 구조기를 가져와서 대상을 만들어야 한다.
package test.java.zxj.test_project;

import java.lang.reflect.Constructor;

public class TestReflection {

	public static void main(String[] args) throws Exception {
		Class> clz = Class.forName("test.java.zxj.test_project.User");
		//         
		Constructor> constructor = clz.getConstructor(String.class, String.class);
		Object object = constructor.newInstance("userId_001","name_jack");
//		System.out.println(object instanceof User);
		if (object instanceof User) {
			User user = (User)object;
			System.out.println("userId:" + user.getUserId());
			System.out.println("name:" + user.getName());
		}
	}

}

결과 인쇄 가능
userId:userId_001
name:name_jack

주의: 여기에서 구조기를 얻는 것은 공공의 것만 얻을 수 있으며, 개인적인 필요에 대한 폭력적인 반사만 얻을 수 있습니다
constructor.setAccessible(true);

좋은 웹페이지 즐겨찾기