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

max аватар
130
Находится в разделах:

Вы любите выступления иллюзионистов? Иллюзионисты делают невозможные вещи возможными одним легким движением руки. Один из интересных трюков - это трюк, в котором иллюзионист кладет своего ассистента в коробку, крутит ее вокруг своей оси, произносит волшебные слова. Затем коробка открывается, а оттуда вылазит тигр.

И так, создадим класс Magician:

Класс Magician имеет два свойства, которые будут установлены Spring DI. Magician нуждается в нескольких магических словах, чтобы иллюзия заработала, поэтому они будут установлены в свойство magicWords. Но самое важное состоит в том, что ему будет дана магическая коробка через magicBox. 

Ключевой момент в классе MagicBoxImpl -это то, что вы должны обратить внимание на метод getContents().  Вы заметите, что он "захардкодженый" и всегда возвращает "A beautiful assistant". - но, как вы позже увидите, вещи не всегда происходят так, как ожидаются. 

Перед тем, как мы сотворим трюк, сперва необходимо дать иллюзионисту его волшебную коробку и связать ее со Spring Application Context.

Когда этот сниппет запускается для получения бина из application context и когда вызывается метод perform(), результат будет ожидаемым:

Магии еще нет.  Но теперь подошло время иллюзии, поэтому изменяем конфигурационный файл XML следующим образом:

Теперь magicBox имеет элемент <replaced-method>. Этот элемент используется для замены метода  новой реализацией метода. Атрибут replacer ссылается на бин, который называется tigerReplacer для реализации подмены.

Spring method replacement

tigerReplacer bean:

TigerReplacer реализует интерфейс MethodReplacer. MethodReplacer требует реализации только одного метода reimplement().  reimplement() принимает три аргумента: целевой объект, которым будет заменен метод,  метод, который будет заменен, и аргументы. В нашем случае, мы не будем использовать эти параметры.

Тело метода reimplement() становится новой реализацией метода getContents().  Для нашего примера меняется лишь возвращаемое сообщение.

Теперь результат будет следующий:


Конец
Константин Дмитриевич Ушинский в свое время заметил, что воля наша, как и наши мускулы, крепнет от постоянно усиливающейся деятельности; не давая им упражнения, вы непременно будете иметь слабые мускулы и слабую волю.

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

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке