스프링 컨테이너, 빈

jjj-programmer·2022년 6월 18일
0

서블릿 JSP로 게시판 만들기 이후

스프링 공부를 시작하는데 의존성 제거, 의존성 주입이라는 개념을 배우고 있다

이때까지 객체(인스턴스)를 생성할 때, new를 통해서 만들었는데

스프링에서 new를 통해서 객체를 생성하지 않고 클래스, 설정파일을 통해 객체를 생성하는 방법에 대해서 배웠다.

클래스 파일을 통한 스프링 컨테이너 생성

  1. 컨테이너로 사용할 class 파일 생성

configuration 어노테이션은 빈 설정을 담당하는 클래스로 사용하겠다라는 어노테이션이다.


2. 객체를 만들 인터페이스와 클래스 구현

  • 메세지를 출력해 줄 MessageService 인터페이스

  • 인터페이스 구현한 MyMessageService 클래스

생성자 메소드는 0~1000사이의 랜덤한 숫자가 뽑히도록 만들었으며,
getMessage()를 호출하면 Hello, Spring Ioc Container !!! + 0~1000사이의 숫자가 출력되게 구현

  • 시간을 출력해 줄 TimeService 인터페이스

  • 인터페이스를 구현한 MyTimeSerivce

  • MyMessageService와 MyTimeService 클래스를 관리 할 클래스 생성
  • 먼저 ServiceConsumer 인터페이스

  • ServiceConsumer을 구현한 MyServiceConsumer


messageService와 timeService는 new로 인스턴스를 생성하지 않고, set~ 메소드 구현
dosomething는 메세지와 시간을 출력해주는 메소드

다시 BeanConfig.class 라는 스프링 컨테이너로 돌아가서

보통 빈 이름은 메소드 이름
빈 객체는 구현하려는 인터페이스 or 클래스

전부 그런건 아니지만, 나중에 다시 공부하도록 해보자

이렇게 BeanConfig.class 라는 스프링 컨테이너를 채워줬으니 test를 실행해보자

AnnotationConfigApplicationContext 함수에서 (BeanConfig.class)라는 클래스를 컨테이너로 불러오고

getBean의 첫번째 인자 :serviceConsumer1은 bean 이름
getBean의 두번째 인자 :불러오는 빈의 타입 ( 보통 인터페이스를 사용 )

getBean까지 실행되면 결국
지금까지 써오던 ServiceConsumer serviceConsumer = new MyServiceConsumer과 똑같이 된다

그리고 메세지출력과, 시간출력을 담았던 doSomething 메소드를 실행시키면

test 코드에 직접 new를 써서 객체를 만들지 않고, bean을 통해 객체를 만들어서 사용가능.!!

혼자 공부하면서 기록을 남기는 공간입니다.
잘못된 지식이 있다면 댓글로 남겨주시면 감사하겠습니다..!!

profile
비숑견주

0개의 댓글