이전 글에서는 XML파일로 스프링 DI를 설정했다.
이번에는 자바 코드에서 @Bean과 @Configuraion 어노테이션을 사용해 빈객체 설정해보자.
@Bean 어노테이션은 name 속성으로 빈 객체의 ID를 지정할 수 있다.
@Bean(name="user2")
@Configuration 는 클래스를 스프링 설정으로 사용함을 의미한다.
설정 클래스를 이용해서 스프링 컨테이너를 생성할 경우에는 AnnotationConfigApplicationContext 클래스를 사용한다.
예제를 통해 알아보자.
Config 클래스를 스프링 설정 파일로 사용하기 위해서, @Configuration 어노테이션을 적용했다.
@Bean 어노테이션의 name 속성으로 "animal1"을 지정했고, animal1()메서드를 호출하기 위해서는 빈 이름으로 "animal1"을 지정해서 호출 해야한다.
@Bean(name="animalRepo") 어노테이션을 적용한 animalRepository()메서드는 animal 빈 객체를 리스트에 담는다.
AnimalRepository 클래스에는 앞서 설명한 setAnimals() 메서드와,
getAnimalList() 메서드가 존재한다.
getAnimalList()메서드는 향상된 for문을 사용해서, animalMap 객체의 key 값을 String 타입의 name에 담아서 출력한다.
자바 코드를 이용해서 빈 객체를 설정했기 때문에, 이를 읽어오기 위해서는 AnnotationConfigApplicationContext 클래스를 생성한다.
getBean() 메서드의 파라미터 값으로,
첫번째는 빈의 이름, 두번째는 빈 객체의 타입을 지정하여 빈 객체를 얻어온다.
getAnimalNames()메서드는 AnimalRepository클래스의 getAnimalList() 메서드를 호출하기 위해, 파라미터로 AnimalRepository클래스를 받아 getAnimalList()메서드를 호출한다.
위의 클래스를 실행하면, 이와 같은 결과를 얻을 수 있다.
DI 설정하는 방법으로는 XML파일을 이용하거나, 자바코드를 이용하는 방법 등이 있다.
설정하는 방법에 따라 사용하는 컨테이너 구현체가 다르며,
XML 파일을 이용하여 DI를 설정 했을때는 GenericXmlApplicationContext 클래스를 사용하고,
자바 코드를 이용하여 DI를 설정 했을때는,
AnnotationConfigApplicationContext를 사용한다.
자바 코드를 이용한 DI 설정은 비교하자면, XML 파일을 따로 만들어 스프링 컨테이너로 사용하는것 보다 직관적이며, 자바코드이기 때문에 코드 자동완성 기능을 사용할 수 있고, 컴파일러 덕분에 오타등의 설정 정보 오류를 미리 알 수 있다.
하지만 단점도 존재하는데 단점으로는, XML 스키마 기반의 설정을 지원하는 많은 프레임워크나 라이브러리 중 아직 자바 기반의 편리한 설정을 지원하지 않는 경우가 있다.
(출처: 웹 개발자를 위한 Spring 4.0 프로그래밍, 저자 : 최범균)