TIL 열네번째날, 오늘도 새로 학습한 내용을 적어보자.
습득한 지식 및 내용
@Autowired
vs @Resource
vs @RequiredArgsConstructor
@Autowired
: 스프링 지원 어노테이션
: 검색 순서 - 타입 -> 이름 -> @Qualifier -> 검색 실패시 예외처리 or null 처리
@Resource
: 자바 지원 어노테이션
: 생성자 주입 사용x
: 검색 순서 - 타입 -> @Qualifier -> 검색 실패시 예외처리
@RequiredArgsConstructor
: 롬복에서 지원
: 생성자 주입을 필드 주입처럼 간단히 코드 작성 가능
: final 사용 가능해 불변 객체 만들 수 있음
@Controller
@RequiredArgsConstructor
public class TestController {
private final TestService testService;
}
생성자 주입
vs Setter, Field 주입
생성자 주입
: 객체의 생성과 의존관계 주입이 동시에 일어남
// 생성자 주입 -> 객체 생성, 의존관계 주입이 하나의 단계에서 일어남
@Controller
public class TestController {
private final TestService testService;
public TestController(TestService testService) {
this.testService = testService;
}
}
// new 연산을 호출하면 생성자 호출됨
public static void main(String[] args) {
// @TestController controller = new TestController(); <- 컴파일 에러 발생
TestController controller = new TestController(new TestService());
}
Setter, Field 주입
: 객체의 생성 -> 의존관계 주입으로 라이프사이클이 나뉘어짐
// setter 주입 -> controller 객체 만들 때 service 객체와 의존관계 없어도 Controller 객체 만들 수 있음
@Controller
public class TestController {
private TestService testService;
@Autowired
public void setTestService(TestService testSerivce) {
this.testService = testService;
}
}
// 필드 주입
@Controller
public class TestController {
@Autowired
private TestService testService;
}