012.에 방법 setWrappedInstance
이 2.5.6에서 있었고 3.0.0에서 제거되었습니다. 2.5에서 3.0으로 프로젝트를 마이그레이션하는 과정에서 오류가 발생합니다. 조사한 결과 구현 클래스 org.springframework.beans.BeanWrapperImpl
에 여전히 setWrappedInstance
메서드가 구현되었습니다.Spring 2.5에서 Spring 3.0.5로 마이그레이션
아래 코드는 문제의 원인이되는 프로젝트입니다. 난 그냥 BeanWrapperImpl
와 _bw
구현을 대체 할 경우
public FieldComparator(String fieldName, Class clazz) {
_fieldName = fieldName;
_bw = new BeanWrapperImpl(clazz);
}
public int compare(Object o1, Object o2) {
if (o1 == null && o2 == null) return 0;
else if (o1 == null) return -1;
else if (o2 == null) return 1;
// otherwise
_bw.setWrappedInstance(o1);
Comparable v1 = (Comparable) _bw.getPropertyValue(_fieldName);
_bw.setWrappedInstance(o2);
Comparable v2 = (Comparable) _bw.getPropertyValue(_fieldName);
return NullsLowComparator.INSTANCE.compare(v1, v2);
}
그래서이 확인 될 것입니다. 나는 학습 단계에 있으며 스프링은 구현 클래스 그 자체보다는 인터페이스를 사용하도록 강력하게 제안한다고 믿는다.
표준 방식에 대한이 변경 사항입니까, 아니면 간단한 변경으로 넘어갈 수 있습니까?
+1 좋은 설명입니다. 비록 javadoc에서 제안한대로 PropertyAccessorFactory를 사용하는 것이 좋을 것이다. 그것이 언급된다면 당신의 대답은 완벽 할 것입니다. 편집하면 내 것을 지우겠습니다. –