먼저 기존 자동 연결은 한번 지워봄.
public class MemberService { //Ctrl + Shift + T 테스트 바로 만들기.
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
}
public class MemoryMemberRepository implements MemberRepository{
}
컨트롤러는 그대로 둬야 함. 컨트롤러를 통해 최초로 연결되서 그러는 듯.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
Config 클래스를 하나 만듦.
package hello.hellospring;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
main 실행하는
@SpringBootApplication
public class HelloSpringApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringApplication.class, args);
}
}
저거랑 같은 위치에 만드는 듯
다시 Config 코드로 돌아와서,
package hello.hellospring;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
@Configuration
이게 아마 여기 안에 Bean이 있어요 이 소리 인듯.
@Bean
빈으로 등록할 건 저렇게 하고 return으로 객체 보냄.
return new MemberService(memberRepository());
memberRepository() 함수도 bean으로 등록되어 있어서 실행 가능.
보통 @Service, @Repository, @Controller 같이 정형화 되어 있는 경우는 컴포넌트 스캔 이용, 그 외에 정형화 되지 않은 것과, 혹은 상황에 따라 구현클래스를 변경 해야 할 경우 위 처럼 @Bean으로 등록.
이 수업 상에서는, Repository를 우리가 DB선정이 안되었다고 가상 시나리오를 정했기 때문에 Memory 상에서 먼저 했는데, 이렇게 변경할 예정이 있는 건 정형화 되어진 거라도 @Bean으로 등록.
근데 난 솔직히 모두 @Bean으로 등록하는 게 좋아 보임. 한 눈에 볼 수 있어서. @Service, @Repository, @Controller 는 최상위에 놓고.
여튼, 우리가 결국 나중에 MemberRepository 인터페이스 통해 DbMemberRepository 만들게 되면, 위에서
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(dbMemberRepository());
}
// @Bean
// public MemberRepository memberRepository(){
// return new MemoryMemberRepository();
// }
@Bean
public DBMemberRepository dbMemberRepository(){
return new DBMemberRepository();
}
}
이렇게만 MemberService의 인자를 바꾸어 주고, DBMemberRepository만 추가해 주면 된다.
'스프링 > 0. 입문, 전체방향' 카테고리의 다른 글
14강. 간단한 웹 기능 -조회 (0) | 2023.07.08 |
---|---|
13강. 간단 회원 웹 기능 -등록 (0) | 2023.07.08 |
11장 스프링 빈 등록. 자동 의존관계 설정 (0) | 2023.07.08 |
10장 회원 서비스 테스트 (0) | 2023.07.08 |
9장 회원관리 서비스 구현 (0) | 2023.07.07 |