Повторное использование класса JavaBean в других bean-компонентах - PullRequest
0 голосов
/ 01 июля 2011

У меня есть два объекта Node1 и Node2, и оба используют Bean1 (JavaBean).

Я пытаюсь включить свойства Bean1 в Node1 и Node2, не дублируя вручную свойства Bean1.Также я пытаюсь повторно использовать BeanInfo Bean1 в обоих объектах.

Я думал об использовании cglib, но возможно ли это вообще?

Подробнее : Узлы моделируют входы задания, т. Е. Узел1 является входом задания1 и т. Д.Типы ввода могут иметь общий тип внутри, который является Bean1.Скажем, Bean1 имеет свойство bean1Prop, а Node1 имеет свойство node1Prop, а Node2 имеет свойство node2Prop.

Мне понадобится что-то вроде Node1 {node1Prop, bean1Prop} и Node2 {node2Prop, bean1Prop}.Обратите внимание, что каждый узел будет иметь отдельный экземпляр Bean1 во время init.Теперь я могу получить свойства вручную путем делегирования, что я не хочу делать, чтобы избежать дублирования кода.Я просто хочу сообщить каждому классу узлов, что я хочу использовать свойства bean-компонента Bean1.

Кажется, что cglib может создавать такие объекты во время выполнения.Но я предполагаю, что тип времени выполнения будет просто Object?

Кроме того, Bean1 имеет класс beaninfo, который я хочу использовать в Node1BeanInfo (by getAdditionalBeanInfo ()) и аналогично в Node2BeanInfo.

IЯ не уверен, что Node1BeanInfo и Node2BeanInfo будут распознаваться (JavaBeanTool) как классы beaninfo для объектов, сгенерированных во время выполнения cglib.

Я должен добавить, что я никогда раньше не использовал cglib.

Моя основная цель - избежать дублирования кода, что будет важно в этом случае, когда общий тип используется для многих входов работы (очень распространено).

Я ценю ваши мысли по этому поводу.

Ответы [ 2 ]

0 голосов
/ 02 июля 2011

Да, Beans - это хороший способ повторно использовать код.

Нет, нет причин, по которым Node1 и Node2 не могут совместно использовать Bean1 для реализации одинаковых функций. На самом деле они должны .

Пока все хорошо ...

Однако, если вы хотите поделиться STATE между вашими узлами, ваш первый вопрос - КАК вы хотите сохранить состояние.

ПРОСТОЙ ПОДХОД: написать файл свойств в открытом виде

АЛЬТЕРНАТИВНЫЙ ПОДХОД: сохранить свойства в базе данных

При любом подходе вы могли бы: a) чтобы bean-компонент прочитал свойство при запуске (из базы данных, файла свойств и т. д.) б) ваш клиент запросит бин для значения свойства

ВСЕ ЕЩЕ АЛЬТЕРНАТИВА: просто жестко запишите значения в вашем бине:)

0 голосов
/ 01 июля 2011

Я не уверен, что вы имеете в виду, но это звучит так:

public class Node1 {
    private Bean1 bean1;

    public Node1(Bean1 bean1) {
        this.bean1 = bean1;
    }
}


public class Node2 {
    private Bean1 bean1;

    public Node2(Bean1 bean1) {
        this.bean1 = bean1;
    }
}

Только будьте осторожны: если Node1 и Node2 оба указывают на один и тот же экземпляр Bean1, вам придется беспокоиться об изменениях, когда один класс сразу становится видимым для другого. Вы можете сделать себе несколько неприятных сюрпризов с этой договоренностью.

...