스프링 빈을 등록하는 두 가지 방법, 컴포넌트와 직접 자바코드로 등록하는 방법을 배우고, 외부에서 객체를 주입하는 의존성 주입 방법에 대해서 배우자.
😀 웹을 만들고 싶어~! ➡️ 컨트롤러를 만들어야 한다.
컨트롤러는 서비스를 통해서 동작하기 때문에 이를 위한 ⭐의존관계를 설정해야한다.
= 멤버컨트롤러가 멤버서비스를 의존한다.
🤔의존관계를 설정하는 방법
회원 컨트롤러가 회원서비스와 회원 리포지토리를 사용할 수 있게 의존관계를 준비하자.
그러기 위해서는 📌 스프링 빈으로 등록을 해야한다.
등록 방법
1️⃣ @Component
애노테이션을 통해 스프링 빈으로 자동 등록
2️⃣ 생성자에 @Autowired
애노테이션이 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. (스프링 빈으로 등록된 객체들에서 찾아서!!)
@Component
를 포함하는 애노테이션도 스프링 빈으로 자동 등록
➡️ @Controller
, @Service
, @Repository
💡 @Autowired
생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
💡 의존성 관계 주입 DI (Dependency Injection)
이렇게 객체 의존관계를 외부에서 넣어주는 것을 ⭐의존성 주입이라 한다.
📂 controller
📄 MemberController
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
📄 MemberService
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
📄 MemoryMemberRepository
@Repository
public class MemoryMemberRepository implements MemberRepository {
...
}
➕ 스프링에서 컴토넌트를 스캔하고 등록할 때 유의사항
1. 기본으로 싱글톤으로 등록한다.
2. 하위 파일이아니면 컴포넌트 스캔을 안한다
@Configuration
와 SpringConfig
를 사용해서 스프링 빈을 등록한다.@Service, @Repository, @Autowired
애노테이션은 사용하지 않는다. ❌ ⚒️ SpringConfig
여기서 스프링 빈을 등록하고 객체를 주입한다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
스프링 빈을 등록하는 두가지 방법
📌 컴포넌트 애노테이션 사용과 생성자 주입은 @Autowired를 사용해서!
📌 config를 통해서 자바코드로 직접 객체 주입 @@