20200414_TIL

|

2020_04_14

  • @Autowired 방법별 비교

    필드 인젝션

    • 스프링 컨테이너에 의해서만 주입받을 수 있기 때문에 제약이 있다

    세터 인젝션

    • 보통 스프링 로딩 시점에 객체 생성과 주입이 완료되므로 굳이 세터 인젝션을 사용할 필요가 없다.
    • 생성 시점에 의존관계가 있는 객체를 세팅 하지 않기 때문에 NPE가 발생할 여지가 있다

    생성자 인젝션

    • 의존관계가 있는 객체를 생성 시점에 주입하지 않으면 객체를 생성할 수 없다. 즉, 컴파일 시점에 오류를 잡아낼 수 있다

    • 장점

      • NPE 방지
      • 주입받을 필드를 final로 선언가능하다

    final 키워드 사용 하는 이유?

    1. 불변성을 보장하므로 의도를 명확히 드러낼 수 있다(ex 상속 금지, 불변 객체).
    2. 불변성을 가진 객체는 항상 하나의 상태를 가지므로 에러 발생의 여지가 적고 디버깅할 때 유리하다.
    3. 스레드 세이프하다.

    JPA

    1. entityManager.persist() 호출하면 JPA가 바로 DB에 insert문을 호출하지 않고 트랜잭션이 커밋될 때 flush한다.

    2. 웹서버가 여러 개 띄워져 있고, 회원가입 메서드에 동시에 접근한다면 ?

      • 동시성 문제가 발생할 수 있다 -> member.name을 unique 키로 잡아놓으면 디비에서 막을 수 있다