Repository를 인터페이스로 생성할때 JpaRepository 를 상속받게 되면 Repository어노테이션을 붙이지 않더라도 빈으로 주입된다. 이를 나는 JpaRepository내에 이미 어노테이션이 존재하기때문에 안붙여도 된다~~라고 들었기 때문에 그런줄 알고 지냈었다. 그렇게 팀원에게 어노테이션 안에 있어서 안붙여도 되요 라고 했지만 직접 들어가보니 어노테이션이 없엇다. 그럼 실제 어디서 빈등록을 해주는걸까???
정답은 @EnableJpaRepositories에서 처리를 해준다. 직접 코드를 들어가보면
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({JpaRepositoriesRegistrar.class})
public @interface EnableJpaRepositories {
String[] value() default {};
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
ComponentScan.Filter[] includeFilters() default {};
ComponentScan.Filter[] excludeFilters() default {};
String repositoryImplementationPostfix() default "Impl";
String namedQueriesLocation() default "";
QueryLookupStrategy.Key queryLookupStrategy() default Key.CREATE_IF_NOT_FOUND;
Class<?> repositoryFactoryBeanClass() default JpaRepositoryFactoryBean.class;
Class<?> repositoryBaseClass() default DefaultRepositoryBaseClass.class;
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
String entityManagerFactoryRef() default "entityManagerFactory";
String transactionManagerRef() default "transactionManager";
boolean considerNestedRepositories() default false;
boolean enableDefaultTransactions() default true;
BootstrapMode bootstrapMode() default BootstrapMode.DEFAULT;
char escapeCharacter() default '\\';
}
@Impoert 부분에서 레지스터로 스프링이 처음 실행했을때 jpa를 읽어와 빈등록을 해준다 AOP같다 라는생각을 했다
'개발일기 > TIL(Since24.04.19)' 카테고리의 다른 글
테이블 컬럼이 변경되었을때 DB가 동작하는 방식 (0) | 2025.04.20 |
---|---|
임베딩 된 값이 제대로 들어갔는지 확인해보자 (0) | 2025.04.18 |
MMA 멀티 모듈 방식이란? (0) | 2025.03.26 |
Swagger와 RestDocs 비교: 장단점 (0) | 2025.02.24 |
Java Arrays.sort(arr, Comparator) 정리 (0) | 2025.02.04 |