JavaConfig정리
JavaConfig란 DI컨테이너에 불러올 설정을 자바의 클래스에 작성하기 위한 스프링의 기능.
JavaConfig클래스는 여러파일로 나눠 작성할수 있고, 작성한여러 JavaConfig클래스를 DI컨테이너로 불러오는 방법은 크게3가지
- AnnotationConfigApplicationContext클래스의 생성자 인수로 지정
- @Import로 가져오기
- 컴포넌트 스캔
1.AnnotationConfigApplicationContext클래스의 생성자 인수로 지정하여 가져오려면 각 @Configration를 선언한 후
ApplicationContext context = new AnnotationconfigApplicationContext(AConfig.class,BConfig.class); 으로 각 클래스를 지정한 다음 JavaConfig클래스를 DI컨테이너에서 불러온다.
2.@Import를 사용하여 가져오는 방법은
@Configuration
@Import(AConfig.Class)
public class Bconfig{......로 import를 선언한 다음
ApplicationContext context = new AnnotationconfigApplicationContext( Bconfig .class);로 선언하여 가져오면 해당 Bconfig.class에 Aconfig.Class가 import 되어있어 JavaConfig클래스를 DI컨테이너에서 불러올수 있다.
3.컴포넌트 스캔을 사용하는 방법은
@Configuration
@ComponentScan
public class BConfig{.....로 @ComponentScan을 선언하면 해당 패키지에 속하면 해당 패키지를 베이스 패키지로 하여 컴포넌트가 이루어진다.
(해당 패키지에 속하면서 @Configuration이 선언되어있으면 불러와 진다.)
@Bean 정리
@Bean메서드는 Bean을 정의하는 방법중 하나로 JavaConfig(@Configuration)클래스 안에서 @Bean을 붙인 메서드를 작성한다.
예)
@Configuration
public class testConfig{
@Bean
public testService testService(){.......}
}
이렇게 @Bean은 Di컨테이너가 자동으로 호출해주며 반환된 객체는 Bean으로 관리된다. 그리고 @Bean메서드는 하나의 JavaConfig클래스 안에서 여러개를 정의할수 있다.
@Configuration
public class testApplication {
@Bean
public OrderService AService() {
}
@Bean
public OrderService BService() {
}
}
※Bean정의 방법별 장.단점
Bean정의 방법 | 장점 | 단점 |
스테레오타입 어노테이션 | 대량의 Bean정의를 간결하게 할수있음 | 개발자가 작성한 클래스에만 Bean정의를 할수 있음 |
@Bean | 라이브러리가 제공하는 클래스에도 Bean정의를 할수 있음 | 대량의 Bean정의는 힘듬 |
참고로 개발자가 Bean을 정의할때는 스테레오 타입 어노테이션을 사용하는게 좋다. 그 이유는 개발자가 개발하다보면 점점 대량으로 만들어지기 때문이다.
기존spring에서는 xml에 <bean class=""com.ext.~~~~으로 작성을 하였는데 @ Bean과의 차이점은 무엇일까? 차이점은 거의 없다.(둘다 선언해서 쓰는것이기 때문에)
그렇다면 어느쪽을 사용하는게 좋은가? @Bean은 자바프로그램으로 작성을 하므로 타입세이프(클래스이름등을 잘못쓰거나 다른 형태의 객체를 변수로 대입할때 컴파일 오류가 발생하는것)하게 작성할수있다.
한마디로 xml로 bean태그를 작성하게 된다면오타가 나거나 문장이 길어진다는 단점이 있다.
'WEB > SPRING' 카테고리의 다른 글
2.[spring boot]프로파일로 설정 전환하기 (0) | 2024.11.02 |
---|---|
1.[스프링]기본 정리 (0) | 2024.05.11 |