📌 IOC(Inversion of Control)?
📌 스프링 빈이란?
💻 회원 컨트롤러에 의존관계 추가
우선 /hello.hellospring/controller 하위에 MemberController 를 생성합니다.MemberController
는 MemberService
를 의존을 하고 있기 때문에 의존관계를 추가해줍니다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Controller
어노테이션은 적용이 된 클래스가 컨트롤러임을 나타내는 빈으로 등록이 되게 됩니다.@Autowired
는 스프링 IoC 컨테이너가 의존 객체에 해당하는 빈을 찾아서 의존성을 주입해주는 어노테이션입니다.👀 의존성 주입이란?
💻 회원 서비스 빈 등록MemberController
가 의존하고 있는 MemberService
를 찾아서 주입을 해주기 위해서는MemberService
에 @Service
어노테이션을 추가해 빈으로 등록을 해줘야 합니다.
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
💻 회원 리포지토리 빈 등록MemberService
도 MemoryMemberRepository
을 의존을 하고 있기 때문에 MemoryMemberRepository
에도 @Repository
어노테이션을 이용해 빈으로 등록해줍니다.
@Repository
public class MemoryMemberRepository implements MemberRepository {}
📌 컨포넌트 스캔
@Componet
어노테이션을 가진 모든 대상을 가져와서 빈을 등록하기 위해 찾는 과정을 뜻합니다.@Controller
, @Service
, @Repository
, @Configuration
모두 코드 내부에 @Component
이 들어가 있으므로 컴포넌트 스캔 대상에 포함됩니다.위와 같은 방식말고도 직접 설정을 통해 스프링 빈으로 등록할 수 있는 방법이 있다.
위에서 작성한 @Service
,@Repository
, @Autowired
어노테이션을 제거하고 /hello.hellospring/SpringConfig.java
파일을 생성해 다음과 같이 작성해줍니다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Bean
어노테이션을 통해 MemberRepository
를 스프링 빈으로 등록을 하고 MemberService
에 주입을 해줍니다.public class CornerService {
private final CornerRepository cornerRepository;
public CornerService(CornerRepository cornerRepository) {
this.cornerRepository = cornerRepository;
}
}
@Configuration
public class SpringConfig {
}
```
해당 포스트는 김영한, [스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술], (2022, 11월 28일), 섹션 4. 스프링 빈과 의존관계 강의를 참고하여 작성하였습니다.
리미
[스프링1] 7장. 테스트 코드 작성하기 (0) | 2023.11.17 |
---|---|
[스프링1] 6. 데이터베이스 연동 (0) | 2023.11.10 |
[스프링 1팀] 5-6장. API를 작성하는 다양한 방법 및 데이터베이스 연동 (0) | 2023.11.03 |
[스프링 1팀] 1장 ~ 4장. 스프링 부트란? + 개발에 앞서 알면 좋은 기초 지식 + 개발환경 구성 + 스프링부트 애플리케이션 개발하기 (0) | 2023.10.13 |
[스프링1] 섹션6. 스프링 DB 접근 기술 JPA (0) | 2023.10.06 |