2011-06-11 2 views
0

Я искал некоторую помощь по API CDI. Извините, если мой вопрос выглядит наивным, я попробовал посмотреть в сети на некоторое описание высокого уровня на интерфейсах CDI, но не смог понять это правильно.JBoss cdi-api использует

javadoc говорит:

контексты и Dependency Injection (CDI) определяет набор дополнительных услуг, которые помогают улучшить структуру кода приложения.

Мой вопрос в EJB 3.X У нас уже есть аннотации для помощи с DI и инъекционными ресурсами, такими как PersistenceContext и другими ресурсами. Итак, где именно API CDI будет полезен? В простых веб-приложениях/автономных программах Java с использованием J2SE?

ответ

2

EJB 3.0 поставляется с инъекцией зависимостей на ресурсо- и EJB-уровне - который является довольно прохладно уже :-)

Что КДИ делает (и что еще круче) - это снижает барьер для зависимостей инъекции так называемые «управляемые бобы» (JSR 316), которые (среди прочих) определяют минимальный набор предварительных условий, которые класс должен извлечь из инъекции зависимости. Просто немного упрощая, можно сказать, что все классы в проекте CDI управляются бобами и поэтому могут быть использованы для DI.

Подводя итог, что КДИ приносит более EJB 3.0 в терминах DI:

  • Вам не нужно больше EJBs КДИ в основном работает с POJOs. Это действительно легкий вес, потому что он позволяет использовать EJB, когда вам нужно EJB, а не когда вам нужен DI.
  • DI превращает stateful - разные зависимости живут в разных областях - что-то EJB 3.0 полностью не доставляет.
  • вы можете извлечь выгоду из типизированных и слабосвязанной перехватчик механизм
  • вы можете извлечь выгоду из типизированных и слабосвязанной механизм

Взгляни на первую главе here, и вы получите идею: -)

1

DI В Java EE5 вы можете вводить только такие ресурсы, как JDBC DataSource, JPA EntityManager, UserTransaction, Web Services, EJB и т. Д. Все эти ресурсы управлялись контейнером.

С EE6 и с CDI, в частности, вы не можете вводить только ресурсы - вы можете вводить все (каждый компонент). Посмотрите аннотации, которые поставляются с спецификацией CDI: @Inject, @Named, @Scope, @Singleton и т. Д. CDI предоставляет вам такие функции, как события, декораторы и т. Д.

Посмотрите на этот учебник, это должно помочь вам понять CDI: http://java.dzone.com/articles/cdi-di-p2

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