[TIL] 2024.07.05.

limlim·2024년 7월 5일
0

TIL

목록 보기
14/27

TIL 열네번째날, 오늘도 새로 학습한 내용을 적어보자.

습득한 지식 및 내용

  • @Autowired vs @Resource vs @RequiredArgsConstructor
  1. @Autowired

    : 스프링 지원 어노테이션

    : 검색 순서 - 타입 -> 이름 -> @Qualifier -> 검색 실패시 예외처리 or null 처리

  2. @Resource

    : 자바 지원 어노테이션

    : 생성자 주입 사용x

    : 검색 순서 - 타입 -> @Qualifier -> 검색 실패시 예외처리

  3. @RequiredArgsConstructor

    : 롬복에서 지원

    : 생성자 주입을 필드 주입처럼 간단히 코드 작성 가능

    : final 사용 가능해 불변 객체 만들 수 있음

@Controller
@RequiredArgsConstructor
public class TestController {

	private final TestService testService;
    
}

  • 생성자 주입 vs Setter, Field 주입
  1. 생성자 주입

    : 객체의 생성과 의존관계 주입이 동시에 일어남

    // 생성자 주입 -> 객체 생성, 의존관계 주입이 하나의 단계에서 일어남
    @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());
    }
  2. 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;
    }
profile
不怕慢,只怕站 개발자

0개의 댓글