목차
⚡️ @Configuration 어노테이션 / JavaConfig 등록
스프링에서 스프링 빈을 관리하는 설정 방식에는 XML과 JavaConfig 두가지 방식이 존재합니다.
그 중 JavaConfig에서 @Configuration 어노테이션을 사용하게 되면
설정이라는 단어의 뜻 그대로 선언 된 자바 클래스는 스프링 설정을 담당하는 클래스가 됩니다.
@Configuration
public class ConfigClass {
...
}
자바 클래스를 설정파일로 만들어 주었으면 그 안에 객체들을 빈으로 등록해야 합니다.
⚡️ @Bean 어노테이션 / Bean 등록
메소드 레벨에서 사용되는 @Bean은 대게 개발자가 만들지 않는
외부 라이브러리의 객체들을 빈으로 등록할 때 사용됩니다.
직접 만든 클래스도 빈으로 만들 수 있지만 그러한 클래스는 대부분 @Component-scan를 이용해 등록합니다.
그럼 코드로 직접 알아보겠습니다.
@Configuration
public class ConfigClass {
@Bean
public Travel travel(Camera c) {
return new Travel(c);
}
@Bean
public Camera camera() {
return new SonyCamera();
}
}
객체를 리턴하는 두 메소드에 @Bean 어노테이션을 선언해 스프링 자체적으로 빈 등록이 되도록 합니다.
(사용 된 클래스는 바로 전 글에서 사용한 클래스와 동일하니 이 글을 참고해주세요.)
JavaConfig 설정과 Bean 등록까지 마쳤으니 컨테이너를 만들어 실행해보도록 하겠습니다.
⚡️ AnnotationConfigApplicationContext / Bean 가져오기
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext factory
= new AnnotationConfigApplicationContext(configuration.ConfigClass.class);
Travel travel = (Travel) factory.getBean("travel");
System.out.print("travel.photography : ");
travel.photography(); // print 메소드
}
}
어노테이션을 이용한 JavaConfig에서 Bean의 인스턴스를 가져오려면
BeanFactory의 종류중 하나인 AnnotationConfigApplicationContext의 객체가 필요합니다.
생성자 파라미터에는 @Configuration 어노테이션이 선언된 클래스를 넣어 설정 정보로 사용합니다.
(여러개의 클래스를 ( , ) 로 구분하여 넣을 수도 있습니다.)
생성한 뒤에는 객체.getBean("[빈 이름]") 메소드를 이용해 Application Context가 관리하는 빈을 받아오게 됩니다.
빈 이름은 직접 설정하지 않았다면 @Bean이 선언된 메소드의 이름을 넣어주면 인식합니다.
'Spring' 카테고리의 다른 글
[Spring/스프링] ComponentScan, XML & Java 사용법 (0) | 2022.04.05 |
---|---|
[Spring/스프링] 싱글톤 패턴(Singleton pattern) 과 @Scope prototype (0) | 2022.04.02 |
[Spring/스프링] @Qualifier 구분자, 의존성 주입 시 위치 (0) | 2022.04.02 |
[Spring/스프링] 제어의 역행(IoP)과 의존성 주입(Dependency Injection, DI) (0) | 2022.03.31 |
[Spring/스프링] 스프링 프레임워크의 특징, 사용하는 이유 (0) | 2022.03.29 |
댓글