상세 컨텐츠

본문 제목

Reflection 을 이용한 getMethod / getDeclaredMethods / invoke

Spring/JAVA

by Chan.94 2021. 11. 22. 21:55

본문

반응형

IoC컨테이너에서 관리되고있는데 오브젝트들을 호출해서 사용해야 할 경우가 있다.

IoC컨테이너와 Bean에 대한 자세한 내용은 여기에서 확인바란다.

 

@Autowired
private ApplicationContext applicationContext;
Class<?> object = applicationContext.getBean("mailSender").getClass();

Method method = object.getMethod("getPassword");
		
Object obj = method.invoke(object);

 

ApplicationContext

Spring 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이다.

 

IoC 방식을 따라 만들어진 일종의 빈 팩토리이다. 빈 팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이고, ApplicationContext는 별도의 정보를 참고해서 빈의 생성, 관계설정 등의 제어를 총괄한다. 

 

또한 싱글톤을 저장하고 관리하는 싱글톤 레지스트리이다. Spring은 기본적으로 별다른 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.

 

Reflection

리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API

 

이 정의를 이해하기 위해서는 개발자 가 아닌 컴퓨터 입장에서 생각해야한다.

 

개발하고자 하는 사람은 달리 말해서 전지적 작가 시점 이다.

 

설계와 구상을 통해 어떤 것을 어떻게, 무엇을 개발해야 할지 알고 있다.

 

하지만 컴퓨터, 즉 Code 입장에서는 구체적인 클래스 타입을 알지 못하기 때문에 어떤 것을 실행해야 할지 모른다.

그러나, 개발자는 구체적인 클래스 타입을 알지 못해도 해당 클래스에 선언되어있는 Method 나 Class 의 이름이나 Parameter 의 타입을 알고 있기 때문에 그러한 정보를 토대로 구체적인 클래스 타입을 유도해서 호출할 수 있다.

getMethod

상속한 메소드를 포함해서 접근지정자가 public인 메소드만을 가져온다.

 

getDeclaredMethods

상속한 메소드를 제외하고 접근지정자에 상관없이 모든 메소드를 가져온다.

 

invoke

메소드 호출

반응형

관련글 더보기

댓글 영역

>