Spring. Базовое замещение методов при method injection

Вы любите выступления иллюзионистов? Иллюзионисты делают невозможные вещи возможными одним легким движением руки. Один из интересных трюков - это трюк, в котором иллюзионист кладет своего ассистента в коробку, крутит ее вокруг своей оси, произносит волшебные слова. Затем коробка открывается, а оттуда вылазит тигр.
И так, создадим класс Magician:
Класс Magician имеет два свойства, которые будут установлены Spring DI. Magician нуждается в нескольких магических словах, чтобы иллюзия заработала, поэтому они будут установлены в свойство magicWords. Но самое важное состоит в том, что ему будет дана магическая коробка через magicBox.
Ключевой момент в классе MagicBoxImpl -это то, что вы должны обратить внимание на метод getContents(). Вы заметите, что он "захардкодженый" и всегда возвращает "A beautiful assistant". - но, как вы позже увидите, вещи не всегда происходят так, как ожидаются.
Перед тем, как мы сотворим трюк, сперва необходимо дать иллюзионисту его волшебную коробку и связать ее со Spring Application Context.
Когда этот сниппет запускается для получения бина из application context и когда вызывается метод perform(), результат будет ожидаемым:
Магии еще нет. Но теперь подошло время иллюзии, поэтому изменяем конфигурационный файл XML следующим образом:
Теперь magicBox имеет элемент <replaced-method>. Этот элемент используется для замены метода новой реализацией метода. Атрибут replacer ссылается на бин, который называется tigerReplacer для реализации подмены.

tigerReplacer bean:
TigerReplacer реализует интерфейс MethodReplacer. MethodReplacer требует реализации только одного метода reimplement(). reimplement() принимает три аргумента: целевой объект, которым будет заменен метод, метод, который будет заменен, и аргументы. В нашем случае, мы не будем использовать эти параметры.
Тело метода reimplement() становится новой реализацией метода getContents(). Для нашего примера меняется лишь возвращаемое сообщение.
Теперь результат будет следующий:
Материалы, которые могут вас заинтересовать
- Spring. Внедрение методов (Method injection)
- Spring. Работая с application context
- Spring. Введение в BeanFactory
- Spring. Теги на форме / Form Tags
- Spring: Контроллеры, основанные на аннотациях / Annotation Controller. Пример
- Spring SimpleFormController. Пример
- Пример Spring MVC
- Spring. Внедрение через конструктор / Constructor injection
- Spring. Внедрение через сеттер / Setter injection







Отправить комментарий