스프링 빈 등록 방법
1. 자동
2. 직접 자바 코드로
이번에 배울 건 자동
스프링 뜰 때 맨처음 스프링 컨테이너가 생성된다.
그 때,
public class MemberController {
}
이런 식으로 @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);
}
}
저렇게 위의 경로.
MemberService 경로.
물론 저것도 바꿀 수 있다고 함..
'스프링 > 0. 입문, 전체방향' 카테고리의 다른 글
13강. 간단 회원 웹 기능 -등록 (0) | 2023.07.08 |
---|---|
12장. 스프링 빈 등록. 자바 코드로 직접 (0) | 2023.07.08 |
10장 회원 서비스 테스트 (0) | 2023.07.08 |
9장 회원관리 서비스 구현 (0) | 2023.07.07 |
8강 회원관리 예제 테스트 (0) | 2023.07.06 |