프로그램이 거대해 짐에 따라XML을 이용하여IOC Container를 설정하는 것이 점점 어려워졌고 때문에Annotation(@)이란 것이 등장했다(이하 어노테이션).어노테이션은코드에 메타데이터를 작성하여 직관적인 코딩이 가능하게 만들어주며 이에 따라 생산성이 증대되는 장점을 가지고 있다.
@Configuration
- @Configuration : Configuration 어노테이션은 스프링 IOC Container에게 해당 클래스를 Bean 구성 Class임을 알려주는 것이다.
@Bean
- @Bean : 어노테이션의 경우 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들려할 때 사용된다.
[ @Bean, @Configuration ] 개발자가 직접 제어가 불가능한 외부 라이브러리 또는 설정을 위한 클래스를 Bean으로 등록할 때 @Bean 어노테이션을 활용1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해 주어야 함
Bean으로 만드는 annotation
어떤 클래스를 bean으로 만들기 위해선 @Bean을 사용하거나 @Component를 사용하면 된다. 그렇지만 Bean과 Component는 차이가 있다.
사용하는 관점에서 차이점은 아래와 같다.
@Component는 클래스 상단에 적으며 그 default로 클래스 이름이 bean의 이름이 된다. 또한 spring에서 자동으로 찾고(@ComponentScan 사용) 관리해주는 bean이다.
@Bean은 @Configuration으로 선언된 클래스 내에 있는 메소드를 정의할 때 사용한다. 이 메소드가 반환하는 객체가 bean이 되며 default로 메소드 이름이 bean의 이름이 된다.
어노테이션과 XML을 혼합해서 사용하는 방법
- Spring project name : FiveMVC - 프로젝트는 스프링 레거시 프로젝트로 생성 - 디렉터리 구조
ApplicationConfig.java
package com.javalec.ex;
import java.util.ArrayList;
import org.springframework.context.annotation.*;
//1개 이상 Bean을 등록하고 있음을 명시하는 어노테이션
@Configuration
public class ApplicationConfig {
@Bean
public Student student1() {
// 취미 리스트에 데이터 넣기
ArrayList<String> hobbys = new ArrayList<>();
hobbys.add("수영");
hobbys.add("요리");
// 생성자에 데이터 삽입
Student student = new Student("홍길동",20,hobbys);
// 세터에 데이터 삽입
student.setWeight(80);
student.setHeight(180);
return student;
}
// @Bean
// public Student student2() {
// // 취미 리스트에 데이터 넣기
// ArrayList<String> hobbys = new ArrayList<>();
// hobbys.add("독서");
// hobbys.add("음악감상");
//
// // 생성자에 데이터 삽입
// Student student = new Student("팟캐스",30,hobbys);
// // 세터에 데이터 삽입
// student.setWeight(70);
// student.setHeight(170);
//
// return student;
// }
}