2015-09-03 3 views
1

Я прочитал несколько книг по различным рамкам DI, и я вижу, что вокруг меня выбрали термин «reify» или «reified» (прошедшее время), но я могу 'твердо понять, что на самом деле означает кодовое.Что именно означает «reify» в контексте инъекции зависимостей

состояние

Википедию определения

замыкающие (что-то абстрактное) более конкретное или реальное.

Я также прочитал What do “reify” and “reification” mean in the context of (functional?) programming?, что подтверждает вышеуказанное определение в контексте программирования.

Но я не могу получить изображение в голове, как это применяется в коде (в контексте DI). Причина в том, что я пытаюсь отлаживать stacktrace, глядя на некоторый исходный код HK2, и вижу переменные/методы, такие как reified и фрагменты, такие как if (!reified).

Итак, я хотел бы получить пример кода, когда что-то есть не reified и когда/как оно становится reified, и, возможно, немного лучше объясняет, как это определение применяется в контексте DI.

Примечание: Хотя вопрос помечен и , я думаю, этот вопрос можно ответить любым осведомленным в DI, так как я не думаю, что термин строго привязан к Java DI. Я видел термин, используемый в книге о Ninject (C# framework).

+1

Как [это Clojure сайт] (HTTP : //spootnik.org/entries/2014/01/25_poor-mans-dependency-injection-in-clojure.html), мы используем reify для создания экземпляра объекта, выполняющего определенный протокол (или интерфейс Java) " , Таким образом, это, вероятно, означает создание конкретного объекта во время выполнения, который будет использоваться в качестве зависимости. –

ответ

2

В HK2 термин reify конкретно о том, был ли класс ActiveDescriptor уже загружен по классу.

Все службы в HK2 имеют ассоциированный ActiveDescriptor, который содержит информацию об услуге. Некоторая информация доступна о сервисе до того, как класс, связанный с сервисом, будет загружен по классу (например, контракты на обслуживание и квалификаторы в строковой форме). Некоторая информация об услуге известна только после того, как служба загружена по классу, а затем проанализирована (reified). Например, квалификаторы могут быть затем проверены на соответствие полям, и можно найти фактический набор точек впрыска.

Перед тем, как класс загружается и анализируется, ActiveDesctiptor считается NOT reified. После загрузки и анализа класса ActiveDesctiptor считается reified.

Поскольку HK2 очень чувствителен к вещам, как время запуска он стремится, чтобы попытаться сохранить ActiveDesciptors НЕ реифицированные до тех пор, как он может, снижая нагрузку на замок загрузчика классов

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