이슈 요약Spring 6.2.3 이후 버전에서 GenericConversionService에서 잘못된 컨버터가 선택되는 문제가 발생했습니다. 6.2.3 전후 컨버터 선택 로직의 변화6.2.3 이전 - 컨버터 선택 방식@Nullable public GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType) { for (GenericConverter converter : this.converters) { if (!(converter instanceof ConditionalGenericConverter genericConverter) || genericConverter...
스프링
spring 6.2.4 버전 이후의 코드를 기준으로 작성하였습니다. GenericConversionService: 대부분의 환경에 적합한 ConversionService의 기본 구현입니다. ConfigurableConversionService 인터페이스 등록 API를 통해 ConverterRegistry를 간접적으로 구현하고 있습니다.ConversionService: 타입 변환을 위한 인터페이스입니다. 이것이 변환 시스템의 진입점입니다. 이 시스템의 convert(Object, Class) 사용하여 스레드 안전 타입 변환을 수행할 수 있습니다.ConverterRegistry: 타입 변환 시스템을 변환기에 등록하기 위해 사용합니다.ConfigurableConversionService: 모든 변환 서비스 유..
BeforeSaveCallback를 기준으로 작성하였습니다.Entity Callbacks 공식 문서 정리동기식, JDBCentityCallbacks.callback 실행까지JdbcAggregateTemplate을 사용해 save를 진행하는 과정은 아래와 같습니다.// JdbcAggregateTemplatepublic T save(T instance) { Assert.notNull(instance, "Aggregate instance must not be null"); verifyIdProperty(instance); return performSave(new EntityAndChangeCreator(instance, changeCreatorSelectorForSave(insta..
EntityCallback은 Spring Data Relation 프로젝트입니다. Spring 데이터 인프라는 특정 메서드가 호출되기 전과 후에 엔티티를 수정하기 위한 훅을 제공합니다. 이러한 EntityCallback 인스턴스는 콜백 방식으로 엔티티를 확인하고 잠재적으로 수정할 수 있는 편리한 방법을 제공합니다.EntityCallback은 특수한 ApplicationListener와 매우 유사합니다. 엔티티 콜백은 동기식 및 반응형 API를 모두 갖춘 통합 지점을 제공하여 처리 체인 내에서 잘 정의된 체크포인트에서 순서대로 실행되도록 보장하며, 잠재적으로 수정된 엔티티 또는 반응형 래퍼 유형을 반환합니다. 엔티티 콜백은 일반적으로 API 유형별로 구분됩니다. 이러한 분리는 동기식 API는 동기식 엔티티..
public @interface InsertOnlyProperty공식 문서에 따르면 이 어노테이션이 있는 프로퍼티는 업데이트가 아닌 삽입 작업 중에만 데이터베이스에 기록된다고 합니다.@InsertOnlyProperty는 spring-data-relation에 속하는 어노테이션으로 JDBC와 R2DBC 접근을 위해 사용됩니다. 삽입 중에만 기록될 수 있는 이유// SqlGenerator// Columns 생성Columns(RelationalPersistentEntity entity, MappingContext, RelationalPersistentProperty> mappingContext, JdbcConverter converter) { this.mappingCont..

HandlerMethod 등록스프링에서 requestMappingHandlerMapping이 생성되며 선언한 컨트롤러의 메서드들이 요청처리를 위한 메타정보과 함께 HandlerMethod로 등록된다.public HandlerMethod( String beanName, BeanFactory beanFactory, @Nullable MessageSource messageSource, Method method) { super(method); Assert.hasText(beanName, "Bean name is required"); Assert.notNull(beanFactory, "BeanFactory is required"); this.bean..