BeanUtils с методом addXX - PullRequest
       32

BeanUtils с методом addXX

1 голос
/ 25 августа 2009

Я использую метод Apache BeanUtils setProperty для общего импорта данных из файла Excel. Я предоставляю парсеру список пар «имя столбца» и «имя свойства», а затем анализатор устанавливает свойства с помощью setProperty (..., «имя свойства», ...) для полей Excel, которые совпадают с «именем столбца» ». Это работает хорошо, но теперь у меня проблема, у меня есть свойство, которое устанавливается методом addXXX (), и я не могу изменить этот класс. Как я могу установить это свойство без изменения этого класса или парсера? Является ли это возможным? Могу ли я создать что-то вроде оболочки с DynaClass, PropertyUtils или MethodUtils, чтобы при установке этого свойства вызывать метод addXX?

Спасибо!

1 Ответ

0 голосов
/ 25 августа 2009

Вы можете написать класс bean-компонента decorator, который обернет ваш класс и предоставит метод setXXX (), делегирующий addXXX () обернутого bean-компонента. Вы даже можете сделать это через динамический прокси с помощью cglib или любой другой библиотеки инструментария байт-кода.

Если вы предпочитаете идти по пути DynaClass, обратите внимание на WrapDynaClass в качестве отправной точки. Вам придется расширить его, чтобы предоставить пользовательский PropertyDescriptor для вашего метода. Я бы не стал этого делать по двум причинам: во-первых, семантика addXXX (), вероятно, сильно отличается от setXXX (); и во-вторых, весь внутренний API DynaClass / DynaBean немного запутан, тогда как написание собственного класса декоратора очень просто.

...