Как заполнить JavaBean, кроме использования отражения - PullRequest
0 голосов
/ 03 апреля 2011

знаете ли вы, что я могу заполнить javabean, но я не хочу использовать рефлексию.

Например, у меня есть этот шаблон xml для накачки

Пример XML-файла

<property name = "card" value = "cdd"/>

public class Customer {
    private String card;

     public void setCard(String card) {
          this.card = card;
     }

     public String getCard() {
     }

}

Я хочу вызвать setCard для Java-компонента, но не хочу использовать отражение так как я использовал его раньше, и это довольно медленно,

Есть ли альтернативы? Как, например, Hibernate это делает?

Спасибо Carlo

Ответы [ 3 ]

1 голос
/ 03 апреля 2011

Единственный более быстрый способ (т. Е. Быстрее, чем использование отражения) для заполнения JavaBean из XML - это либо написать, либо сгенерировать некоторый связывающий код, который вызывает установщики со значениями, извлеченными из XML (в данном случае, из атрибутов XML).

  • Написание связующего кода - самый простой подход ... при условии, что вам не нужно много писать.

  • Код может быть сгенерирован как исходный код и скомпилирован.

  • Код может быть создан с использованием технологии генерации байт-кода, такой как BCEL или ASM.

  • Может существовать некоторый существующий генератор привязки XML-JavaBean, хотя существующие привязки вполне могут использовать отражение, а не генерацию кода.


Однако не ясно, стоит ли пытаться избегать рефлексии. Хотя рефлексия относительно дорога, XML, вероятно, значительно дороже. Я бы порекомендовал выполнить профилирование, прежде чем вы решите использовать более сложный подход к реализации.

0 голосов
/ 03 апреля 2011

Если Bean принадлежит вам, вы можете реализовать такой интерфейс:

/** Tries to set the property named key with the value given and returns true for success or false otherwise. */
boolean set(String key, Object value);

Затем просто приведите к этому интерфейсу и попробуйте использовать этот метод для установки свойств. Это конечно требует некоторой работы в бине - но избегает отражения.

0 голосов
/ 03 апреля 2011

Я уверен, что Hibernate использует API отражения глубоко под капотом.Groovy также имеет хорошую поддержку для автоматического создания и использования методов получения / установки бинов, которые также в конечном итоге используют отражение под капотом.

Теперь есть опция, где вы можете жестко написать свой анализатор, чтобы прочитать xml и вызвать соответствующий установщик, учитывая атрибут name, но вы столкнетесь с проблемой того, что ваш синтаксический анализатор станет хрупким (когда ваша модель изменяется,имеет смысл).

...