Подтвердить что ты не робот

В чем разница между инъекцией ресурсов и инъекцией зависимостей (CDI) в Java?

Я изучаю Java EE для и обнаружил, что Java EE предоставляет два типа механизмов инъекций.

  • Включение ресурсов
  • Инъекция зависимостей

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

4b9b3361

Ответ 1

Java EE предоставляет механизмы инъекций, которые позволяют нашим объектам получать ссылки на ресурсы и другие зависимости без необходимости их непосредственного создания (явно с "новым ключевым словом" ). Мы просто объявляем необходимые ресурсы и другие зависимости в наших классах, рисуя поля или методы с аннотациями, которые обозначают точку впрыска компилятору.

Затем контейнер предоставляет требуемые экземпляры во время выполнения. Преимущество Injection заключается в том, что он упрощает наш код и отделяет его от реализаций его зависимостей.

Оба метода облегчают достижение инверсии управления.

Взгляните на мою статью, которую я написал на этом.

Ответ 2

Из source:

Включение ресурсов позволяет вводить любой доступный ресурс в JNDI в любой объект, управляемый контейнером, такой как сервлет, предприятие bean или управляемый bean. Например, мы можем использовать ресурс инъекции для ввода источников данных, разъемов или любых других желаемых ресурсы, доступные в пространстве имен JNDI.

Включение зависимостей позволяет нам превращать обычные классы Java в управляемых объектов и вставлять их в любой другой управляемый объект (объекты, которыми управляет контейнер).

Разница между впрыском ресурсов и инъекцией зависимостейразличия между RI и DI перечислены ниже.

  • Инъекция ресурсов может вводить ресурсы JNDI напрямую, тогда как инъекция зависимостей не может.

  • Инъекция зависимостей может вводить обычные классы (управляемые bean), тогда как Resource Injection не может.

  • Инъекция ресурсов разрешается по имени ресурса, тогда как Dependency Injectin разрешается по типу.

  • Инъекция зависимостей является типичной, тогда как Resoiurce Injection не является.

Ответ 3

Ответ Рахул Трипати - точный и правильный. Но, чтобы выразить это более кратким образом, который может помочь вам решить, что использовать, давайте посмотрим на это следующим образом: DI обычно используется для назначения классов реализации интерфейсам. В то время как RI используется для извлечения значений свойств и JDBC-соединений из JNDI. DI позволяет вам писать код против интерфейсов и позже решать, какую реализацию использовать. Существует некоторое перекрытие, как правило, когда объекты RI'd больше, чем просто значение свойства, и когда DI используется для передачи значения свойства. Хорошим примером такого перекрытия, как я уже упоминал, является JDBC-соединения. Соединение JDBC - это не только строка соединения (значения свойств), но и реализация (какие драйверы использовать).

Я думаю, что если вы используете DI и вам нужно передать некоторое значение свойства, просто продолжайте использовать DI. И если вы используете RI и вам нужно передать объект, то, если это возможно, просто сделайте это в RI. В конечном счете, если вы используете оба, то больше XML файлов, которые необходимо заполнить.