@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(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임)
@PersistenceContext private EntityManager em;
아래처럼 사용가능 / 스프링부트
@RequiredArgsConstructor
public class MemberRepository {
//@PersistenceContext
private final EntityManager em;
}