У меня есть весенний проект, который содержит файл определения боб, содержащий компонент, который ссылается на другой компонент в качестве свойства, напримерВыбор какой bean ссылки в весну?
<bean id="aBean" class="org.test.class">
<property class="org.test.A" autowire="byType"/>
</bean>
Этот файл определения боб будет импортирована другими весенними проектами, которые могут или не могут содержать бобы, которые расширяют org.test.A.
Что я хотел бы сделать, так это то, что если существует реализация расширения org.test.A (т.е. org.test.B), я хотел бы ссылаться на это в свойстве, иначе просто ссылку org.test. A.
Я занимаюсь некоторыми исследованиями по этому вопросу, но не пришел к ответу. Я попробовал написать пользовательский TypeFilter, но, похоже, мне разрешено возвращать true или false, следует ли возвращать класс или нет, вместо того, чтобы проверять все существующие определения bean-класса для класса и выбирать его.
Возможно ли такое? Если да, то как это сделать?
Идея состоит в том, чтобы избежать необходимости переписывать кучу определений bean-компонентов, которые ссылаются друг на друга (и в большинстве случаев будут одинаковыми в каждом проекте) и только записывают реализацию ссылочного компонента.
Любые материалы по этому вопросу оцениваются.
----- UPDATE 1 ------
Я дал ему попробовать с помощью @Primary и до сих пор не повезло. Нет ошибок, но используемый класс не тот, у которого есть @Primary.
Основной класс org.test.A расширяет другой класс (org.test.Whatever), то в моем контексте сервлета У меня есть следующие
<bean id="someID" class="org.someclass">
<property name="realm" ref="testBean" />
</bean>
И тогда я создал другой орг. test.B класс, который расширяет org.test.A и имеет как @Component, так и @ Primary, но не идет. Весна, похоже, загружает класс, но не использует его.
----- UPDATE 2 -----
Хорошо, я думаю, я знаю, что происходит. Класс, который я использую autowiring (который я не контролирую исходный код), имеет 2 метода набора, 1, который принимает один класс и тот, который берет коллекцию этого класса. Весна, кажется, думает, что, поскольку она находит несколько фасолей одного класса, она должна автоустанавливать набор, который берет коллекцию, а не автоустанавливает набор, который принимает один экземпляр.
Как указать в контексте xml, который я запускаю класс, какой метод должен быть автообновлен? Я не понимаю, почему весна не позволит мне использовать атрибут autowire для свойства. Я могу только установить autowire на bean, который оставляет весну, чтобы выбрать, какой метод использовать autwire. : S
Вы можете оставить свой классный код с аннотациями –
Прочтите мои обновления выше. Кажется, проблема в другом месте. Я создал какой-то единичный тест, чтобы ускорить процесс, и кажется, что весна делает некоторые махинации, которые действительно раздражают, и я не могу найти способ получить контроль над тем, какой метод является автонастройками. – ByteFlinger
. Я не понимаю, что означают эти: Я указываю, в контексте xml, который я запускаю класс, какой метод должен быть автообновлен? –