이번 시간에는 순수 자바코드에서 스프링으로 전환하였다.
이전 시간까지 DI도 역시 순수 자바코드로 개발을 했지만, 스프링을 적용해볼 것이다.
먼저 AppConfig를 수정할 것이다.
AppConfig 클래스로 이동해서 Configuration 어노테이션을 추가해준다.
Configuration은 애플리케이션이 어떻게 구성되는지에 대한 설정 정보 혹은 구성 정보를 담당하는 어노테이션이다.
그래서 스프링에서는 설정정보에 Configuration 어노테이션을 달아준다.
그리고 모든 메소드에 Bean 어노테이션을 추가해준다.
이렇게 어노테이션을 추가해주면, 스프링 컨테이너에 빈(Bean) 객체로 등록이 된다.
MemberApp 클래스로 이동해서 AppConfig 버전에서 스프링 버전으로 바꿀것 이다.
빈 객체들을 관리해주는 스프링 컨테이너를 생성하기 위해 ApplicationContext를 위와 같이 호출해준다.
코드 설명을 하자면, AppConfig에 있는 환경설정 정보를 가지고, 스프링이 빈 객체들을 생성해서 스프링 컨테이너에 넣어서 관리해준다~~
이전 코드에는 그림의 14번째 라인과 같이 appConfig를 통해서 직접 호출을 했는데,
이제는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 호출하게 된다.
applicationContext.getBean() 메소드를 사용해서 객체를 찾을 수 있다.
MemberService를 호출하기 위해, 첫번째 파라미터인 name값을 "memberService"를 넣어준다.
(이름은 기본적으로 메소드 이름으로 등록되기 때문!)
두번째 파라미터인 타입은 MemberService.class로 넣어준다.
코드 작성을 하고, 메소드를 실행해보면 콘솔창에 로그가 찍힌 것과 같이, 빈 객체가 생성되는 것을 확인할 수 있다.
예를 들어, MemberService의 경우에 key값을 memberService으로 하고, 리턴값인 new MemberSerivceImpl을 객체 인스턴스로 해서 컨테이너에 등록되고 관리가 된다.
그래서 나중에 객체를 꺼낼때는, 스프링 컨테이너에서 이름으로 꺼내면 된다.
OrderApp 클래스도 마찬가지로, 기존 코드를 주석처리하고 스프링 컨테이너를 통해서 호출하는 코드를 작성한다.
위의 코드에서 orderService를 예로 들면~~
AppConfig의 orderService 빈 객체를 가져오는 것이다~~!
정리를 하자면, ApplicationContext 를 스프링 컨테이너라고 한다.
기존 코드는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만,
이제부터는 스프링 컨테이너를 통해서 사용한다.
스프링 컨테이너는 @Configuration 어노테이션이 붙은 AppConfig를 설정 정보로 사용한다.
그리고 @Bean 어노테이션이 달린 메소드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.
이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈(Bean)이라고 한다.
그리고 스프링 빈은 @Bean이 붙은 메소드 명을 스프링 빈의 이름으로 사용한다.
위와 같이 name을 수동으로 (name = " ")으로 바꿔줄수 있긴 하다.
하지만 관례상 메소드 명을 쓴다는거~~
기존에는 개발자가 직접 자바코드로 모든 것을 했다면, 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고,
스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.
즉, 스프링에 환경 정보(Configuration)를 주고, 찾을때는 스프링 컨테이너를 통해서 가져온다~~
스프링이 환경 정보를 가지고 필요한 것들을 읽어서 컨테이너에서 관리를 하고,
필요한 객체는 스프링 컨테이너한테 getBean으로 받아온다!
댓글