스프링 부트 및 스프링 데이터 설정 (@Data)이 있습니다. 한 엔티티의 속성이 변경되면 몇 가지 작업을 수행해야합니다. 관찰자 패턴을 사용하려고합니다. 코드에서 해당 속성의 setter를 호출 할 때 stateChanged를 추가했습니다. 예상대로 작동 할 것이라고 생각하십니까, 아니면 봄이 장면 뒤에서 세터를 부르는 것입니까?엔티티의 옵저버가 항상 작동하지 않는 경우
답변
봄은 확실히이 세터를 수시로 호출하지 않습니다.
엔터티 업데이트가 데이터베이스에 유지되기 바로 전에 사용자 지정 코드를 실행하려면 엔터티 클래스의 메서드에서 @PreUpdate 주석을 사용하거나이 메서드를 사용하여 상위 수준의 추상 엔터티 클래스를 가질 수 있습니다. @PreUpdate 코드는 동일합니다.
@PreUpdate
public void onPreUpdate() {
//your custom code here
}
이렇게하면 설정자로부터 stateChanged 통화를 제거 할 수 있습니다.
우리는 두 가지 시나리오에 대한 비슷한 필요성을 가지며 두 가지 다른 솔루션을 사용해야했습니다.
우리는 세션 팩토리에 org.hibernate.event.service.spi.EventListenerRegistry를 사용하고 PRE_UPDATE 나 SAVE 등과 같은 필수 이벤트를 들었다. 우리의 경우 리스너는 다른 애플리케이션에 대한 지식이있다. . 그런 다음 이벤트 리스너는 이벤트 발생에 대한 필수 빈을 통지합니다. 그러나 이것은 최대 절전 모드 이벤트에만 유효합니다.
다른 시나리오의 경우 우리는 응용 프로그램의 다른 부분에 재미있는 일이 있음을 알려야했습니다. 정확히 관찰 할 수있는 패턴은 아니지만 필요성은 비슷했습니다. 우리는 org.springframework.context.ApplicationEventPublisher를 사용했고 다른 빈들은 org.springframework.context.ApplicationListener를 사용하여 원하는 유형의 이벤트를 들었다.
제 경험상 두 번째 방법은 클래스가 서로를 인식하지 못해 훨씬 더 깔끔했습니다. 그러나 엔티티가 최대 절전 모드 엔티티 인 경우이 방법은 작동하지 않을 수 있습니다.
아직 그 질문에 대해 연구 중입니다. 그러나. .. 나는 대답을 찾은 것 같아. 왜냐하면 저는 봄 환경에서 세터가 현장 뒤에서 전화를받는 것을 보았 기 때문입니다. 생성자에서 AUTOWIRING- 속성과 autowiring을 FROM ITS
@Autowired private ServiceTest testService;
대 우리가 를 사용하는 경우 그래서 관찰자 패턴이 봄 환경에서 법인에 적용 할 수
@Autowired
public ServiceOther(ServiceTest testService){
this.testService = testService;
}
해당 속성에 대한생성자에서 자동 배선.
아직도 1000 % 확신 할 수 없습니다. 따라서 누군가가 주제에 능숙하다면 설명하십시오.
- 1. startMonitoringForRegion이 항상 작동하지 않는 경우
- 2. SendKeys가 항상 작동하지 않는 경우
- 3. Ajax가 항상 작동하지 않는 경우
- 4. GetFormFieldNames가 항상 작동하지 않는 경우
- 5. Application_OnError가 항상 작동하지 않는 경우
- 6. OSGi 서비스 추적기가 항상 작동하지 않는 경우
- 7. C# SendKeys.SendWait()이 항상 작동하지 않는 경우
- 8. Gtk.Label.Text 변경이 항상 작동하지 않는 경우
- 9. JavaScript가 Qualtrics에서 항상 작동하지 않는 경우
- 10. 2 테이블의 비교가 항상 작동하지 않는 경우
- 11. 자바 스크립트가 항상 WebView에서 작동하지 않는 경우
- 12. jQuery append가 항상 작동하지 않는 경우
- 13. 정규식이 꺽쇠 괄호로 항상 작동하지 않는 경우
- 14. Java repaint() 메소드가 항상 작동하지 않는 경우
- 15. SQL 텍스트가 항상 작동하지 않는 경우
- 16. PowerShell TrimStart가 항상 작동하지 않는 경우
- 17. Jquery 자동 완성이 항상 작동하지 않는 경우
- 18. Frame.Content 설정이 항상 작동하지 않는 경우
- 19. $가 하스켈에서 항상 작동하지 않는 경우
- 20. SMO 복원이 항상 작동하지 않는 경우
- 21. CellContentClick 이벤트가 항상 작동하지 않는 경우
- 22. WakefulBroadcastReceiver의 IntentService에있는 BroadcastReceiver가 항상 작동하지 않는 경우
- 23. Event.PreventDefault()가 항상 작동하지 않는 경우
- 24. iPhone reachability 샘플이 항상 작동하지 않는 경우
- 25. 주제별 TextView 모양이 항상 작동하지 않는 경우
- 26. setTimeout이 Greasemonkey에서 항상 작동하지 않는 경우
- 27. Java Graphics.drawString이 항상 작동하지 않는 경우
- 28. 스피커를 켜는 설정이 항상 작동하지 않는 경우
- 29. 패턴이 항상 Android에서 작동하지 않는 경우
- 30. 클릭이 항상 Selenium에서 작동하지 않는 경우
내가 setter에서 stateChange를 그대로두면 해당 객체를 사용하는 모든 쿼리에서 주제가 통보된다는 것을 의미합니까? – strash
데이터를 직렬화 할 때 현재 버전이 setter를 호출하지 않는 것처럼 보입니다. 나는 내 대답을 편집 할 것이다. '@ PreUpdate' 예제와 같이'@ PostLoad' 주석을 사용하여 엔티티가로드 될 때 알림을받을 수 있습니다. 이 관찰자들과 함께 무엇을 이루려고합니까? 더 큰 그림을 제시하면 더 나은 답을 얻을 수 있습니다. –
amazon SNS를 사용하여 알림을 보내야합니다. 내 엔티티 중 하나에서 속성이 변경되면 팔로어에게 알릴 때입니다. – strash