2009-10-08 2 views
0

В последнее время я натолкнулся на очень запутанную ошибку, пытаясь очистить мои конфигурации пружин. Исключение составлялось из глубины сторонней библиотеки и в основном было запутанным NPE.Маркировка свойства класса третьей стороны по мере необходимости (Java/Spring)

Что мне хотелось бы сделать, так это настроить Spring, чтобы потребовалось определенное поле этого класса, но я не хочу создавать пользовательскую версию библиотеки.

Очевидное решение будет заключаться в подклассе и помечать там сеттера, но из любопытства мне было интересно, есть ли простой способ сделать это весной без необходимости манипулирования классом.

Java 6u10, Spring 2.5.

+0

Уточнение: Я пытаюсь добавить аннотацию @Required к определенному сетевому устройству, к которому у меня нет доступа, а не к инъекции определенной зависимости. Это проблема метаданных класса, а не инициализация. – liam

+0

@liam - Я понимаю, что вы хотите сейчас, по какой-то причине вы упомянули подкласс, который отбросил меня. См. Обновление в моем ответе. – ChssPly76

ответ

2

Запишите FactoryBean для вашего объекта. Подклассификация не требуется.

Update (на основе комментариев/вопрос осветления)

Я, наконец, понять, что вы пытаетесь сделать сейчас :-) Существует нет ничего весной, что бы делать то, что вы хотите, но это довольно тривиальным написать. Вы в основном смотрите на расширение org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor, за исключением того, что вы указываете имена классов/методов bean статически вместо того, чтобы полагаться на них, которые были аннотированы. Вам нужно будет перезаписать метод isRequiredProperty().

+0

Возможно, я что-то пропустил, но я не вижу, как это поможет. В частности, я прошу добавить @Required к определенному методу, а не инициализировать поля для определенного значения. Я не понимаю, как писать фабрику позволит мне определять метаданные по методам. – liam

+0

@Required - не единственный способ гарантировать, что задано определенное свойство; вы можете сделать это вручную в обратном вызове инициализации, который вы можете получить либо из FactoryBean, либо путем подкласса и реализации InitializingBean, как предложил Гэндальф. Или вы можете аннотировать соответствующий установщик на FactoryBean с помощью @Required. – ChssPly76

+0

Я понимаю, что могу вручную проверять поля, я действительно не вижу преимущества для написания фабрики или создания конструктора вместо простого подкласса. В идеале, я ищу способ, которым я мог бы создать раздел в моих конфигурациях пружин где: - Я даю полное имя класса и список шаблонов методов Spring применяет ту же логику и печатает ту же ошибку используя @Required. Если я нахожу другие свойства в классах, которые требуется моему приложению, я мог бы добавить их для проверки запуска. Я предполагаю, что нет. Спасибо за предложения. – liam

1

Я бы написал класс, который расширяет ваш текущий класс и реализует интерфейс InitalizingBean весной, который проверяет указанные вами поля.

+0

Подклассификация и маркировка методов как @Required - это то, что я планирую, я просто задаюсь вопросом, существует ли способ меток/классов маркировки AOP, как это требуется в конфигурациях. Способ spring/hibernate позволяет вам определять точки для транзакций. – liam

+0

Я собираюсь с моим оригинальным тривиальным подклассом. Как правило, я искал способ пометить сторонние сеттеры по мере необходимости без подкласса или компиляции пользовательской версии фляги. Спасибо за предложение. – liam

Смежные вопросы