2009-08-25 4 views
1

Apache BeanUtils setProperty 메서드를 사용하여 일반적인 방식으로 Excel 파일에서 데이터를 가져옵니다. 파서에 "열 이름"및 "속성 이름"쌍의 목록을 제공 한 다음 파서는 "열 이름 (열 이름)"과 일치하는 Excel 필드에 대해 setProperty (..., "속성 이름", ...) ". 그것은 좋은 일을하지만 지금은 문제가있어, 나는 addXXX() 메서드로 설정되어있는 속성을 가지고 그 클래스를 변경할 수 없습니다. 이 클래스 나 파서를 변경하지 않고이 속성을 설정하려면 어떻게해야합니까? 가능합니까? DynaClass, PropertyUtils 또는 MethodUtils에서 래퍼와 같은 것을 만들 수 있나요?이 속성을 설정할 때 addXX 메서드를 호출합니까?addXX 메서드가있는 BeanUtils

감사합니다.

답변

0

클래스를 둘러 쌀 빈 데코레이터 bean 클래스를 작성하고 wrapped bean의 addXXX()에 위임 한 setXXX() 메소드를 제공 할 수 있습니다. cglib 또는 다른 바이트 코드 계측 라이브러리의 도움으로 동적 프록시를 통해이를 수행 할 수도 있습니다.

DynaClass 방식으로 가고 싶다면 WrapDynaClass을 시작으로 살펴보십시오. 귀하의 방법에 맞게 PropertyDescriptor을 제공하기 위해 그것을 확장해야합니다. 하지만 두 가지 이유 때문에 - 우선 addXXX() 의미가 setXXX()와 상당히 다를 가능성이 있습니다. 두 번째로 전체 DynaClass/DynaBean 내부 API는 약간 지저분한 반면 자신의 데코레이터 클래스를 작성하는 것은 매우 간단합니다.

+0

예, 간단한 데코레이터로 문제를 해결할 때 WrapDynaClass를 사용해야하는 이유는 무엇입니까? 감사! – fmaste

+0

필자는 문서 작성자를 만들었지 만 이전에했던 것처럼 인스턴스를 만들 때 java.lang.InstantiationException이 발생합니다. 누군가 왜 그런지 알고 있습니까? – fmaste

+0

클래스가 abstract 또는 인터페이스이거나 public (또는 호출자가 액세스 할 수있는) 인수가없는 생성자가없는 경우'InstantiationException'이 발생합니다. 문제는 대부분 후자입니다. – ChssPly76