@Component
어노테이션이 있으면 스프링 빈으로 자동 등록된다.
@Component
를 포함하는 어노테이션들 (스프링 빈으로 자동 등록됨)
@Controller
스프링 MVC 컨트롤러로 인식된다.@Repository
스프링 데이터 접근 계층으로 인식하고 해당 계층에서 발생하는 예외는 모두 DataAccessException으로 변환한다.@Service
특별한 처리는 하지 않으나, 개발자들이 핵심 비즈니스 계층을 인식하는데 도움을 준다. (비즈니스 로직을 체계적으로 관리하는 계층)
Java 코드로도 빈을 등록할 수 있다.
클래스를 생성하여 @Configuration
어노테이션을 활용한다.
@Configuration
스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.@Bean
객체를 스프링 빈으로 등록해준다.
위의 코드는 생성자 주입 방식으로 DI를 구현하고 있다.
DI에는 필드 주입, setter 주입, 생성자 주입 이렇게 세 가지 방식이 있는데, 의존관계가 실행 중에 동적으로 변하는 경우는 사실상 거의 없기 때문에 생성자 주입을 적극적으로 권장한다.
사진과 같은 의존 관계를 형성하는 코드다.
@Configuration
어노테이션의 정보를 보면, @Component
가 포함되어 있다는 사실을 알 수 있습니다. 따라서 컴포넌트 스캔 대상이 되어 자동 스캔을 통해 빈 등록이 가능합니다.
@Autowired
를 통한 DI는 스프링 빈으로 등록한 객체에서만 동작한다.