일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- IT동아리
- ㅏㄴ
- 멋사 서류
- discord
- 멋사 면접
- 웹동아리
- 멋사10기
- 크롤링
- 파이썬 크롤링
- 멋쟁이 사자처럼
- 멋쟁이사자처럼
- 백엔드
- 알림봇
- 코딩동아리
- 멋사 서류평가
- 멋쟁이사자처럼 서류
- 깃허브
- 멋사
- 멋사12
- 디스코드봇
- 멋사 합격
- 파이썬
- 멋쟁이사자처럼11기
- 멋쟁이사자처럼10기
- 멋사 10기
- 멋쟁이사자처럼대학
- django
- 멋사11기
- 기사 제목 크롤링
- API
- Today
- Total
ACHO.pk devlog
[Springboot] 자바 코드로 직접 스프링 빈 등록하기 본문
인프런 김영한 강사님의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"의 강의를 듣고 학습하였습니다.
① 자바 코드로 직접 스프링 빈 등록하기 회원 서비스와 회원 레포지토리의 @Service, @Repository, @Autowired 어노테이션을 제거하고 진행한다.
Membercontroller는 그대로 둔다(@Controller와 @Autowired)
② src/main/java/Springboot.study/ 패키지 하위에 SpringConfig 클래스를 생성한다.
③ SpringConfig 클래스에 코드를 작성한다.
package Springboot.study;
import Springboot.study.repository.MemberRepository;
import Springboot.study.repository.MemoryMemberRepository;
import Springboot.study.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();
}
}
▹ @Bean : 스프링 빈을 등록하는 어노테이션
• MemberService() 를
return new MemberService();
위 로직을 호출해서 스프링 빈에 등록을 해준다. 리턴값에 MemberService 생성자이기 때문에 값을 넣어줘야한다.
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
▹MemoryMemberRepository 구현체이기 때문에 new 연산자가 붙을 수 있음. MemberRepository는 인터페이스이기 때문에 안된다.
• MemberService는 MemberRepository를 연결시켜줘야하기 때문에 리턴값인 MemberService 생성자에 memberRepository()를 넣어줘야한다.
return new MemberService(memberRepository());
이렇게 되면, MemberService가 뜰 때, MemberService와 MemberRepository를 스프링 빈에 등록하고, 스프링 빈에 등록되어 있는 memberrepository를 MemberService에 넣어준다.
참고
• DI에는 생성자를 통해서 MemberService가 MemeberController에 주입이 되는 것처럼 .. 생성자 주입
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
• 필드에다 @Autowired를 하는 필드 주입
@Autowired private MemberService memberservice;
• setter 주입
@Autowired
public void setMemberService(MemberService memberservice){
this.memberService = memberService;
}
memberservice를 호출할 때 public으로 되어 있어야한다.
⇢ 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
주의
• @Autowired 를 통한 DI는 stuController , memberService 등과 같이 스프링이 관리하는 객체에서만 동작한다.
스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
'프레임워크 > Springboot' 카테고리의 다른 글
[Springboot] H2 데이터베이스 설치 (0) | 2023.01.22 |
---|---|
[Springboot] 회원 웹 기능(홈 화면 추가, 등록, 조회) (0) | 2023.01.22 |
[Springboot] 스프링 빈과 의존관계 (0) | 2023.01.21 |
[Springboot] 회원 서비스 개발 및 테스트 (0) | 2023.01.19 |
[Springboot] 회원 레포지토리 테스트 케이스 작성 (0) | 2023.01.18 |