20200414_TIL
14 Apr 2020 | TIL2020_04_14
-
@Autowired 방법별 비교
필드 인젝션
- 스프링 컨테이너에 의해서만 주입받을 수 있기 때문에 제약이 있다
세터 인젝션
- 보통 스프링 로딩 시점에 객체 생성과 주입이 완료되므로 굳이 세터 인젝션을 사용할 필요가 없다.
- 생성 시점에 의존관계가 있는 객체를 세팅 하지 않기 때문에 NPE가 발생할 여지가 있다
생성자 인젝션
-
의존관계가 있는 객체를 생성 시점에 주입하지 않으면 객체를 생성할 수 없다. 즉, 컴파일 시점에 오류를 잡아낼 수 있다
-
장점
- NPE 방지
- 주입받을 필드를 final로 선언가능하다
final 키워드 사용 하는 이유?
- 불변성을 보장하므로 의도를 명확히 드러낼 수 있다(ex 상속 금지, 불변 객체).
- 불변성을 가진 객체는 항상 하나의 상태를 가지므로 에러 발생의 여지가 적고 디버깅할 때 유리하다.
- 스레드 세이프하다.
JPA
-
entityManager.persist() 호출하면 JPA가 바로 DB에 insert문을 호출하지 않고 트랜잭션이 커밋될 때 flush한다.
-
웹서버가 여러 개 띄워져 있고, 회원가입 메서드에 동시에 접근한다면 ?
- 동시성 문제가 발생할 수 있다 -> member.name을 unique 키로 잡아놓으면 디비에서 막을 수 있다