스프링/0. 입문, 전체방향

11장 스프링 빈 등록. 자동 의존관계 설정

sdafdq 2023. 7. 8. 15:12

스프링 빈 등록 방법 

1. 자동

2. 직접 자바 코드로

 

이번에 배울 건 자동

 

스프링 뜰 때 맨처음 스프링 컨테이너가 생성된다.

그 때, 

 

@Controller
public class MemberController {

}

이런 식으로 @Controller가 있으면 이 객체를 생성해서 컨테이너에 넣어둔다.(싱글톤으로, 물론 싱글톤 아니게도 할 수 있음.) 그리고 스프링이 관리 함.

 

@Controller
public class HelloController {
  @GetMapping("hello")
  public String hello(Model model){
    model.addAttribute("data", "hello!!");
    return "hello";
}

과거 이것도 스프링에서 컨테이너에 빈으로써 등록되어 접근할 수 있었던 거임.

 

스프링이 관리를 하게 되면 모두 스프링 컨테이너에 등록하고 스프링에서 부터 받아서 쓰도록 만들어 줘야 함.

@Controller
public class MemberController {
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

@Autowired

 

우선 저렇게 @Controller (@Component의 하위) 해놓으면 스프링에서 컨테이너 만들 때 객체를 생성해서 저장해놓는데, 그럴려면 저렇게 등록해 놓은 생성자가 실행 되겠지?

근데 생성자에 @Autowired 이렇게 되어 있으면, 컨테이너에 있는 bean(스프링에선 자바객체를 빈이라 부름) 중 찾아서 필요한 객체를 연결 시켜 줌. 그럼 우선 MemberService 객체도 스프링에 빈으로 등록되도록 해줘야 하겠지?

 

@Service
public class MemberService {    //Ctrl + Shift + T 테스트 바로 만들기.
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository){
        this.memberRepository = memberRepository;
    }
}

@Component의 하위인 @Service.  아마 @Component 이렇게 하면 빈으로써 등록이 되는 듯.

마찬가지로, MemberRepository도 

@Repository
public class MemoryMemberRepository implements MemberRepository{

}

다 됐음.

 

@Controller에서 외부 요청을 받고

@Service에서 비즈니스 로직을 만들고

@Repository에서 데이터를 저장하고.

되게 정형화 되어있는 패턴임.

 

스프링 빈은, 실행한 main? 함수의 경로나 그 하위부터 가능 한 듯.

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args);
	}

}
package hello.hellospring;

저렇게 위의 경로.

 

package hello.hellospring.service;

MemberService 경로.

 

물론 저것도 바꿀 수 있다고 함..