controller/MemberController
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
new로 객체를 생성하게 되면 MemberController뿐만 아니라 다른 여러 controller도 가져다가 쓸 수 있다. -> 해결 방법 : 스프링 컨테이너에 등록하고 사용하면 된다.
@Autowired
가 있으면 스프링이 멤버서비스와 연관된 객체들을 스프링 컨테이너에서 찾아서 연결시켜준다.@Autowired
가 정상적으로 동작하려면 두 인스턴스가 빈으로써 스프링 컨테이너에 들어가 있어야한다. @Service
, @Controller
, @Repository
어노테이션들이 @Component
를 포함하고 있기 때문에 스프링 빈으로 자동 등록이 된다.스프링 빈을 등록하는 2가지 방법
SpringConfig
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.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();
}
}