2014-02-09 5 views
2

Я проходил через google guice, а затем я подумал о том, как он может работать.Как google guice работает внутри

Так что это моя теория о том, как работает property injector.

Guice сначала хочет, чтобы мы создали injector и передали всю информацию binding.

Injector injector = Guice.createInjector(new BillingModule()); 

* фрагменты кода из google guice page

OK в данный момент я могу думать, что есть класс со всей информацией о binding.

и когда мы делаем

injector.getInstance(RealBillingService.class); 

Здесь мы делаем свое дело.

injector возвратит proxy instance для реального RealBillingService объекта и при вызове метода RealBillingService объекта

, proxy instance обработчик вызова использует reflection к

фигуру из свойств впрыснуть и FULLFILL его на основе информация, полученная во время создания инжектора.

ВОПРОС

Это так, как я полагаю, в guice работ. Если я ошибаюсь, каков будет фактический способ достижения 'Guice'?

Если это работа путь guice затем Guice всегда возвращает proxy object и код пользователя всегда делает вызов на proxy objects. Это правда ?


Иллюстрированное представление о моих объяснениях

enter image description here

ответ

9

Вашего понимание поодаль. Подумайте об этом так: когда вы делаете Guice.createInjector(...), это, когда Guice делает все размышления, чтобы выяснить, что зависит от того, что и что нужно вводить туда, где. Когда вы делаете injector.getInstance(...), Guice не нужно отражать. Он создает RealBillingService прямо, вводя все его (транзитивные) зависимости и возвращает это (не прокси).

Если вы используете функциональность AOP от Guice, тогда эти объекты будут прокси, но в противном случае Guice не возвращает прокси. Он просто вызывает конструктор @Inject, устанавливает @Inject -занятые поля, вызывает @Inject -номененные методы и возвращает этот объект.

РЕДАКТИРОВАТЬ: См. Также MiniGuice - однокомпонентная реализация инжектора типа Guice.

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