이번 시간에는 컨테이너에 등록한 빈(Bean) 객체들을 확인해보는 시간을 가졌다.
빈 객체를 등록할때, 어노테이션으로 등록하면 자동으로 등록이 되기 때문에 직접 보지는 못했는데,
직접 볼 수 있도록 코딩을 하였다.
빈을 찾는 패키지를 만들기 위해, 테스트 폴더 hello.core 하위에다 beanfind 패키지를 생성한다.
그리고 ApplicationContextInfoTest 테스트 클래스를 생성한다.
테스트 클래스에 빈 컨테이너를 생성해준다.
테스트 프레임워크인 JUnit 5이상부터는 클래스에 public 생략 가능!
빈 정의된 이름 배열을 등록을 해준다.
foreach문을 불러오기 위해 iter을 쓰고 엔터를 하면 자동으로 입력이 된다.
ac.getBeanDefinitionNames로 스프링에 등록된 모든 빈 이름을 조회해준다.
그리고 ac.getBean으로 beanDefinitionName을 빈 이름으로 빈 객체(인스턴스)를 조회한다~~
위의 코드에서 beanDefinitionName이 key값이 되고, bean 객체가 value값이 될 것이다.
테스트 코드가 위와 같이 정상 작동하는 것을 확인할 수 있다!
name = appconfig 뿐만 아니라, memberService부터 등록한 4개의 빈 객체를 확인할 수 있다~~
위의 코드에서 볼 수 있듯이, 등록한 빈 객체 외에도 스프링 컨테이너 내부적으로 돌아가는 코드도 함께 출력이 되는데,
내부 코드 제외하고 볼 수 있도록 테스트를 하겠다.
테스트 코드를 하나 더 만들기 위해 복붙해주고,
빈 하나하나에 대한 메타데이터 정보를 볼 수 있는 getBeanDefinition을 호출한다.
위의 beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION 코드는
스프링 내부에서 작동을 하기 위해 등록한 빈들이 아닌,
애플리케이션을 개발하기 위해 등록한 빈들인 경우에만 출력을 해주기 위해 if문을 작성해준다.
그리고 테스트를 돌려보면~~
위와 같이 직접 등록한 빈 객체들이 직접 출력되는 것을 확인할 수 있다!
댓글