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
- 리소스핸들러
- JPA
- 백준
- 브루트포스
- Application Argument
- 스프링부트
- HATEOAS
- Application Runner
- 백기선
- 정적 리소스
- @Profile
- 다익스트라
- @ConfigurationProperties
- application.properties
- 백트래킹
- 리소스 서버
- HttpMessageConverters
- WebApplication Type
- 스프링 부트
- 알고리즘
- 외부설정
- EnableAutoConfiguration
- OAuth2
- rest api
- Application Event
- Spring Security
- cors
- webjar
- JsonSerializer
- AuthenticationPrincipal
Archives
- Today
- Total
아카이브
[스프링 데이터 JPA] 스프링 데이터 Common 9. 도메인 이벤트 본문
도메인 Entity 클래스 이벤트 발생시키기
스프링 프레임워크의 이벤트 관련 기능
ApplicationContext extends ApplicationEventPublisher
- 이벤트: extends ApplicationEvent
- 리스너
- implements ApplicationListener
- @EventListener
ApplicationContext가 이벤트 Publisher 임
BeanFactory, EventPublisher 인터페이스를 상속받았음
스프링 데이터의 도메인 이벤트 Publisher
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.domain-events
스프링 데이터의 도메인 이벤트 Publisher
- @DomainEvents
- @AfterDomainEventPublication
- extends AbstractAggregateRoot <E>
- 현재는 save() 할 때만 발생합니다.
- 자동으로 AbstractAggregationRoot를 통해 domainEvents에 모아 둔 이벤트를 발생시킨다.
- EventListener가 동작
AbstractAggregationRoot를 통한 이벤트 등록
@Entity
@Getter
@Setter
@ToString
public class Post extends AbstractAggregateRoot<Post> {
@Id
@GeneratedValue
private Long id;
private String title;
@Lob
private String content;
public Post publish() {
this.registerEvent(new PostPublishedEvent(this));
return this;
}
}
PostPublishedEvent 클래스 생성
public class PostPublishedEvent extends ApplicationEvent {
private final Post post;
public PostPublishedEvent(Object source) {
super(source);
this.post = (Post) source;
}
public Post getPost() {
return post;
}
}
PostListener 클래스 없이, TestConfig 파일에 직접 등록
@Configuration
public class PostRepositoryTestConfig {
// @Bean
public PostListener postListener() {
return new PostListener();
}
@Bean
public ApplicationListener<PostPublishedEvent> applicationListener() {
return new ApplicationListener<PostPublishedEvent>() {
@Override
public void onApplicationEvent(PostPublishedEvent event) {
System.out.println("=======================================================================================");
System.out.println(event.getPost() + " is published !!!");
System.out.println("=======================================================================================");
}
};
}
}
'Spring > 스프링 데이터 JPA' 카테고리의 다른 글
[스프링 데이터 JPA] 스프링 데이터 JPA 1. JPA Repository (0) | 2021.01.16 |
---|---|
[스프링 데이터 JPA] 스프링 데이터 Common 10. QueryDSL (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 Common 7. Custom Repository 만들기 (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 Common 4. 쿼리 만드는 방법 및 실습 (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 Common 3. Null 처리하기 (0) | 2021.01.16 |