@Autowired
생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어줌
이것을 DI(Dependency Injection) ― 의존성 주입이라고 함
DI에는 필드 주입, setter 주입, 생성자 주입 세 가지가 있음(보통 생성자 주입을 권장)
스프링은 객체 의존관계 주입해주는 기능이 있는 프레임워크
애노테이션을 달지 않은 객체(= 스프링 빈으로 등록하지 않은 객체)는 DI가 동작하지 X
스프링 빈 등록하는 방법
(1) 컴포넌트 스캔과 자동 의존관계 설정
@Component(어노테이션)가 있으면 스프링 빈으로 자동 등록
@Controller가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문
@Component는 @Controller, @Service, @Repository에 포함되어 있음
즉, 컨트롤러, 서비스, 레포지토리 애노테이션을 달면 스프링 빈으로 자동 등록된다
강의자료에 포함된 위의 사진처럼, 컨트롤러 → 서비스 → 레포지토리에 등록하는 패턴은 정형화되어 있음
(2) 자바 코드로 직접 스프링 빈 등록
@Service, @Repository, @Autowired 애노테이션을 제거하고,
SpringConfig 클래스를 생성하여 @Configuration을 달아준다
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();
}
}
'Programming' 카테고리의 다른 글
[EFUB] BACK-END SEMINAR 1st SESSION (0) | 2022.03.31 |
---|---|
[WEB] HTTP, HTTPS (0) | 2022.03.24 |
[스프링 입문] 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0) | 2022.03.10 |
[처음 시작하는 Java 프로그래밍] 강의 노트 (0) | 2022.01.17 |
[실무자가 알려주는 git 입문] 강의 노트 (0) | 2022.01.11 |