@Repository 어노테이션
스프링에서 지원하지 않는 Exception을 Spring Exception으로 전환하기 위해서 @Repository어노테이션을 사용한다. Exception이 발생할 경우 Unchecked Exception을 DataAccessException으로 전환시켜준다. 주로 DAO(Data Access Object)에서 사용하는데 예를들어 트랜잭션을 적용한 메소드에서 DB오류가 발생해도 롤백이 가능한 이유이다.
Spring Data Jpa 사용 시, 꼭 필요한가?
@Repository 는 빈 등록을 위해 사용한다. 하지만 JpaRepository 인터페이스를 상속받은 리포지토리는 @Repository 가 없어도 정상적으로 빈 등록이 된다.
public interface TestRepository extends JpaRepository<User, Long> {
}
JpaRepository 코드를 열어보았다.
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
하지만 빈 등록이 되는 이유는 찾지 못했다.
[참고] @NoRepositoryBean 을 확인할 수 있는데, 이 어노테이션은 실제 사용되는 리포지토리는 아님을 표시하는 것이다. 따라서 빈 등록이 안되도록 한다.
그렇다면 어떻게 빈 등록이 될까?
바로 @EnableJpaRepositories 이다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(JpaRepositoriesRegistrar.class)
public @interface EnableJpaRepositories
5번째 라인을 보면 JpaRepositoriesRegistrar.class 가 import 되어 있는데, 여기서 실제로 JpaRepository를 상속받은 리포지토리를 빈으로 등록해준다.
'Spring' 카테고리의 다른 글
| Lombok @SneakyThrows (0) | 2023.03.20 |
|---|---|
| Spring Data Jpa 의 Pagination (0) | 2023.03.01 |
| JPQL (0) | 2023.02.20 |
| JPA 연관관계 (0) | 2023.02.16 |
| @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor (0) | 2023.02.13 |