В чем разница между инъекцией ресурсов и инъекцией зависимостей (CDI) в Java?
Я изучаю Java EE для и обнаружил, что Java EE предоставляет два типа механизмов инъекций.
- Включение ресурсов
- Инъекция зависимостей
Пожалуйста, помогите мне понять разницу между инъекцией ресурсов и инъекцией зависимостей.
Ответы
Ответ 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 файлов, которые необходимо заполнить.
Ответ 4
Проверьте это: Java EE Injection
Основные различия между вложением ресурсов и DI:
![Разница между вложением ресурсов и]()