자바/스프링(Spring)

스프링(Spring) 빈 수동등록, 자동등록 하는법

류창 2021. 10. 4. 19:29
반응형

 

빈을 등록하는데는 크게, 수동등록 (@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개이상있으면 오류가 발생한다.

반응형