728x90
SMALL
메소드를 사용하고자 할때 보통 @Resource 를 통해 빈 객체를 통해 클래스의 메소드를 호출해 오거나
User user = new User(); 객체를 내부에 직접 선언하여 메소드를 호출한다.
내가 사용하고자 하는 클래스와 메소드가 명확할때 위와 같이 사용을 한다.
하지만 상황에 따라 사용해야하는 클래스와 메소드가 다양하면 객체를 선언하는 빈도가 많고 소스의 길이가 기하급수적으로 늘어났을 경우 동적으로 메소드를 호출하여 이와 같은 상황을 방지하고자 한다.
구현
String ClassName = "kbs.class.chair"; // 사용하고자 하는 클래스의 위치(chair 라는 이름의 클래스)
Class<?> cls = Class.forName(ClassName); // 클래스이름 정의
// 인자가 없을 경우
Object obj = cls.newInstance(); // 해당 클래스를 객체로 선언하여 사용할수 있게 한다.
Method method = cls.getMethod("sit"); // chair 클래스의 sit라는 메소드를 가져온다
method.invoke(obj); // 해당 메소드를 호출
// 인자가 있을 경우
HashMap<String, String> send = new HashMap<String, String>(); // 메소드에 사용하는 인자를 담을 map
send.put("name", "홍길동"); // 홍길동이라는 값을 메소드에 넘긴다.
Object obj = cls.newInstance(); // 해당 클래스를 객체로 선언하여 사용할수 있게 한다.
Method method = cls.getMethod("sit", HashMap.class); // chair 클래스의 sit라는 메소드를 가져온다. 던지는 인자는 HashMap.class 형태로 보낸다.
String result = (String) method.invoke(obj, send); // 해당 메소드를 호출후 결과값을 result로 받는다.
import java.lang.reflect.Method;
reflection 을 통해 메소드를 동적으로 사용할수 있다.
클래스의 이름이 같은 경우 데이터를 테이블에 관리하거나 하드코딩을 사용함으로 상황에 맞게 원하는 클래스의 메소드를 호출하여 사용한다.
728x90
LIST
'WEB > Spring' 카테고리의 다른 글
Spring Boot로 MSA 개발하기 (5) | 2024.08.30 |
---|---|
스프링 IOC컨테이너 - DI, DL (0) | 2024.03.23 |
스프링에서 Service ServiceImpl 사용하는 이유 (0) | 2024.03.23 |
스프링 전역 예외처리 (0) | 2024.03.23 |
스프링-static field에 의존성 주입하여 DAO 사용하기 (0) | 2024.03.23 |