컴포넌트 스캔
클래스에 특정 Annotation을 붙여 객체를 스프링 빈에 등록할 수 있다.
@Component
@Service
@Repository
<aside>
💡 기본적으로, @Component
Annotation이 컴포넌트 스캔을 가능하게 하고 이외의 Annotation은 @Component
Annotation을 포함하고 있다.
</aside>
<aside> 💡 SpringApplication이 실행되는 패키지부터 스프링이 검색하여 스프링 빈을 등록하며, 다른 패키지의 경우 추가적인 설정이 필요하다.
</aside>
<aside> 💡 스프링 컨테이너에 스프링 빈이 등록될 때, 기본적으로 싱글톤으로 등록된다. (원하지 않는다면 추가 설정 필요)
</aside>
자바 코드로 직접 스프링 빈 등록
package devleejb.springstart;
import devleejb.springstart.repository.MemberRepository;
import devleejb.springstart.repository.MemoryMemberRepository;
import devleejb.springstart.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
과거에는 XML을 사용하였으나, 현재는 잘 사용하지 않는다.
생성자 주입
DI의 방법
<aside> 💡 의존 관계가 실행 중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
</aside>
<aside> 💡 상황에 따라 구현 클래스를 변경해야 하는 경우 자바 코드로 스프링 빈에 직접 등록한다.
</aside>
@Autowired
Annotation을 붙인다.