HomeController도 MemberService가 필요한 상황일 때, 같은 객체가 2개 이상 생성되면 낭비가 발생한다.
이를 해결하기 위해, MemberService 클래스를 Ioc컨테이너에 등록한 후, 필요한 곳에서 @Autowired를 사용하여 리모콘을 공유받는다.
@Component
@Service
, @Repository
의 역할을 대신할 수 있다. 같은 의미지만 가독성을 높이기 위해 사용@Controller
도 @Component
의 일종이지만 @Controller
를 대체할 수는 없다.@Controller
@RequestMapping
사용 @Controller
= @Component
+ @RequestMapping
이라 볼 수 있다.@Service
public class MemberService {
// ...
}
public class HomeController {
private int count;
private final List<Person> people;
@Autowired //필드 주입
private MemberService memberService; //final 불가능
public HomeController() {
count = -1;
people = new ArrayList<>();
}
}
NullPointerException
을 방지할 수 있다.@Service
public class MemberService {
private final MemberRepository memberRepository;
// 생성자 주입 예시
@Autowired // 생략 가능
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public RsData tryLogin(String username, String password) {
@AllargsConstructor
어노테이션으로 코드를 더 간결하게 만들 수 있다.@Service
@AllArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
public RsData tryLogin(String username, String password) {
=> 생성자 주입을 사용하는 것을 권장한다!