[spring][TIL] service, repository 공부하다가

이준규·2022년 2월 8일
0

백엔드

목록 보기
6/13

필드 주입

  @Autowired
  private MemberRepository memberRepository;

세터 주입

@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
   }

안좋은 방법임 사실 setMemberRepository()를 호출할 일도 없고 해서도 안되는 경우가 많은듯

생성자 주입

	private MemberRepository memberRepository;
@Autowired 
public MemberService(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

이 경우에 생성자가 1개인 경우 @Autowired 태그 를 생략해주어도 된다.


### @RequiredArgsConstructor (lombok)

final을 찾아가서 주입해줌. (가장 좋은 방법)


>```java
   private final MemberRepository memberRepository;

@Transactional 어노테이션

  @Transactional(readOnly = true) 
    public List<Member> findMembers(){
        return memberRepository.findAll();

조회 관련 메서드에서는 readOnly 속성을 참으로 해주면 성능향상에 도움이됨

 @Service
@Transactional(readOnly = true)
public class MemberService {

상단에 선언하면 public 한 메소드를 찾아가서 readOnly = true 속성을 적용시킨다.

그 중에 조회기능이 아닌 메서드에 readOnly = true 속성적용이 되면 안돼서

@Transactional //우선권가짐
    public Long join(Member member) {

@Transactional을 붙여주면 우선적용이된다 (디폴트가 false임)


EntityManager 도 적용 가능 / 스프링부트 기능임

	@PersistenceContext
    private EntityManager em;

아래처럼 사용가능 / 스프링부트

@RequiredArgsConstructor
public class MemberRepository {

    //@PersistenceContext
    private final EntityManager em;
}
  
profile
백엔드

0개의 댓글