기본 프로젝트 구조

 

bookService 는 bookRepository를 주입하고 외부에서 의존성을 주입받을 수 있도록 setter를 만든다

 

빈설정 방법 1 : bean 을 xml에 직접 등록

bean 을 설정해주는 application.xml을 생성 후 빈을 등록한다.

resouces폴더에 springconfig 파일형태로 application.xml파일을 생성 후 빈을 등록한다. 매우 고전적인 방법

BookService 와 BookRepository를 빈으로 등록 service에서는 repository를 property로 넣어 의존성을 추가할 수 있도록 등록해줌

이제 빈이 등록 됐는지 꺼내서 확인 해보자.

실행결과

결과값 정상

이렇게 할 경우 매번 빈을 등록해줘야 하기 때문에 매우매우매우 번거롭고 귀찮다.

그래서 스프링 2.5부터 나온 방식은 컴포넌트 스캔을 이용한 방식

 

빈설정 방법 2 : 컴포넌트 스캔component-scan 을 이용한 방식

application.xml 설정파일에 component-scan 을 정의해보자 정의 방식

base-package= "여기서 부터 하위를 모두 스캐닝해서 빈으로 등록하겠다는 뜻"

스캐닝할 때는 기본적으로 @Service ,@Repository를 빈으로 등록하고 저 두가지 어노테이션은 @Component를 확장하고 의존성 주입을 할때는 @Autowired를 이용하여 주입이 가능함

 

1번 방식과는 다르게component-scan을 사용하면 어노테이션을 추가해야함!

결과실행 시 잘 됨

여기서 한단계 더 나아가 xml이 아닌 자바 파일에 빈 설정파일을 만들기

 

빈설정 방법 3 : ApplicationConfig.java 자바파일로 빈설정하기

ApplicationConfig.java를 생성 후  @Configuration어노테이션으로 설정파일로 설정 후 @Bean어노테이션을 이용해 빈으로 직접 등록

 

               위의 경우 @Autowired 어노테이션이 필요하지 않다. 의존성 주입까지 모두 처리했기 때문에

그래서 모든 어노테이션 없이 결과를 실행해도 결과값이 true가 나온다.

          

결과값 확인

추가로 bookservice 에서 의존성을 주입하지 않고 바로 객체를 반환할 경우에는

 

    BookService에서 @Autowired 어노테이션을 추가하면 정상적으로 사용이 가능하다.

 

@Autowired가 없을 경우 객체를 주입받지 못해 테스트 할 경우 false를 출력한다.

 

그런데 말입니다

빈을 일일이 등록하는게 귀찮다. 그래서 사용하는게 @ComponentScan

 

빈설정 방법 4 : ApplicationConfig.java 자바파일안에서 @ComponentScan 으로 빈 자동등록하기

 

@ComponentScan(basePackageClasses = DemoApplication.class) //DemoApplication.class 가 위치한곳부터

컴포넌트 스캐닝을 하라는 의미
@ComponentScan(basePackages = "test.ok.spring.demo" ) //해당 패키지를 스캐닝 하라는 의미

 

스캐닝을 하기위해서는 기본적으로 @Service @Repository어노테이션이 있어야함

 

 

그러나 ApplicationContext를 만들고 지지고 볶고하는 것은 테스트를 위함이고 스프링 부트 기준으로 main함수가 있는 Application.java파일에 @SpringBootApplication이 있다면 위의 모든 일을 처리해줌

 

인프런 백기선님 강좌보면서 정리함

 

 

 

 

 

 

+ Recent posts