Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백트래킹
- 알고리즘
- webjar
- application.properties
- JPA
- Application Runner
- 스프링 부트
- @Profile
- WebApplication Type
- @ConfigurationProperties
- EnableAutoConfiguration
- AuthenticationPrincipal
- 리소스핸들러
- 백기선
- 브루트포스
- cors
- 백준
- HttpMessageConverters
- OAuth2
- 외부설정
- Spring Security
- JsonSerializer
- 스프링부트
- 정적 리소스
- Application Event
- 다익스트라
- Application Argument
- 리소스 서버
- rest api
- HATEOAS
Archives
- Today
- Total
아카이브
[스프링 데이터 JPA] 스프링 데이터 JPA 소개 및 원리 본문
JpaRepository <Entity, Id> 인터페이스
- 매직 인터페이스
- @Repository가 없어도 빈으로 등록해 줌.
@EnableJpaRepositories
- 매직의 시작은 여기서 부터
매직은 어떻게 이뤄지나?
- 시작은 @Import( JpaRepositoriesRegistrar.class )
- 핵심은 ImportBeanDefinitionRegistrar 인터페이스
- Bean을 프로그래밍을 통해 등록할 수 있게 한다.
- JpaRepository를 상속받은 모든 인터페이스들을 찾아서 빈으로 등록해준다.
ImportBeanDefinitionRegistrar를 통한 Bean 등록 과정 간략 예시
/**
* ImportBeanDefinitionRegistrar를 통한 Bean 등록 과정 간략 예시
*/
public class JumenRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
genericBeanDefinition.setBeanClass(Jumen.class);
genericBeanDefinition.getPropertyValues().add("name", "jumen");
registry.registerBeanDefinition("jumenBean", genericBeanDefinition);
}
}
SpringBootApplication 클래스에서 @Import
@SpringBootApplication
@Import(JumenRegister.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
JpaRepository를 상속하여 만드는 현재의 interface 방식
/* JpaRepository를 상속하는 모든 인터페이스들을 찾아서 bean으로 등록해준다. (@Repository 불필요) */
public interface PostRepository extends JpaRepository<Post, Long> {
}
PostRepositoryRunner로 PostRepositry 빈 주입과 테스트
@Component
@Transactional
public class PostRepositoryRunner implements ApplicationRunner {
@Autowired
Jumen jumen; // ImportBeanDefinitionRegistrar 예제 빈 주입
PostRepository postRepository;
// 생성자 주입
public PostRepositoryRunner(PostRepository postRepository) {
this.postRepository = postRepository;
}
@Override
public void run(ApplicationArguments args) {
System.out.println("=============" + jumen.getName());
postRepository.findAll().forEach(p -> {
System.out.println(p.toString());
});
}
}
'Spring > 스프링 데이터 JPA' 카테고리의 다른 글
[스프링 데이터 JPA] 스프링 데이터 Common 2. 인터페이스 정의하기 (0) | 2021.01.16 |
---|---|
[스프링 데이터 JPA] 스프링 데이터 Common 1.레포지토리 (테스트) (0) | 2021.01.16 |
[스프링 데이터 JPA] JPA 프로그래밍 7: Query (0) | 2021.01.10 |
[스프링 데이터 JPA] JPA 프로그래밍 6: Fetch (0) | 2021.01.10 |
[스프링 데이터 JPA] JPA 프로그래밍 5. Cascade (0) | 2021.01.10 |