
📌 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를 작성하는 다양한 방법 및 데이터베이스 연동 (1) | 2023.11.03 |
| [스프링 1팀] 1장 ~ 4장. 스프링 부트란? + 개발에 앞서 알면 좋은 기초 지식 + 개발환경 구성 + 스프링부트 애플리케이션 개발하기 (0) | 2023.10.13 |
| [스프링1] 섹션6. 스프링 DB 접근 기술 JPA (0) | 2023.10.06 |