빈을 등록하는데는 크게, 수동등록 (@Bean)과
자동등록(@Component, @Autowired)가 있다.
먼저 수동등록 하는법을 알아보겠다.
수동등록은, @Configuration주석이 있는 class 안에다
@Bean주석이 들어간 메소드를 넣으면 된다. 사용자가 직접 Bean을 넣어주는거니
스프링컨테이너의 Bean수동등록이라고 한다.
하지만, 수동등록을 하나씩 넣다보면, 몇개 실수로 누락하기도 하고, 일일이 찾아서 받아쓰기도 번거롭다.
이런 불편한점을 없애기위해 탄생한 @Component와 @Autowired을 이용한 자동 빈 등록이다.
@Configuration과 @ComponentScan으로만 사용하면, 자동등록이 끝난다.
자동등록을하려면, 넣을 빈을 담아야하는데, 자동등록에서 빈을 넣기위해서는
구현클래스에 @Component를 넣으면 끝이다.
만약, 구현클래스의 생성자가, 다른 Bean의 참조를받는다면 @Autowired를 넣으면, 등록된 빈을 자동으로 넣어준다
끝이다. @ComponentScan이 담긴 빈클래스와, @Component, @Autowired를 구현체에 넣으면 끝이다.
@ComponentScan은 필터를 적용할수있다.
basePackages: 스캔을 시작할 장소 (default:프로젝트 전부)
includeFilters: 스캔을 추가로할 장소
excludeFilters: 스캔을 안할 장소
주의할점: 수동등록(Custom)과 자동등록(Auto)이 있다면, 수동등록이 우선순위를가진다.
EX) 수동(@Bean("rice") 밥을 짓는다 )
자동(@Component("rice") 밥을 씻는다)
같이넣으면, 오류가 발생하지않고 수동빈이 들어간다.
(오류가 발생하지않는 버그가 정말 무서운법이다...)
자동 Bean이 들어가야하는데 누군가 수동Bean설정으로 덮어씌우면 큰일난다.
자동등록이 2개이상있으면 오류가 발생한다.
'자바 > 스프링(Spring)' 카테고리의 다른 글
자바 스프링 롬복(lombok) 라이브러리 (0) | 2021.12.21 |
---|---|
스프링의 다양한 AutoWired (의존관계) 주입법 (0) | 2021.12.19 |
스프링(Spring): 싱글톤(Singleton) 패턴 (0) | 2021.10.01 |
자주쓰이는 스프링 테스트코드 정리글 (1) | 2021.09.06 |
스프링 컨테이너 (0) | 2021.09.04 |