Я изучаю Java EE для и обнаружил, что Java EE предоставляет два типа механизмов инъекций.
- Включение ресурсов
- Инъекция зависимостей
Пожалуйста, помогите мне понять разницу между инъекцией ресурсов и инъекцией зависимостей.
Я изучаю Java EE для и обнаружил, что Java EE предоставляет два типа механизмов инъекций.
Пожалуйста, помогите мне понять разницу между инъекцией ресурсов и инъекцией зависимостей.
Java EE предоставляет механизмы инъекций, которые позволяют нашим объектам получать ссылки на ресурсы и другие зависимости без необходимости их непосредственного создания (явно с "новым ключевым словом" ). Мы просто объявляем необходимые ресурсы и другие зависимости в наших классах, рисуя поля или методы с аннотациями, которые обозначают точку впрыска компилятору.
Затем контейнер предоставляет требуемые экземпляры во время выполнения. Преимущество Injection заключается в том, что он упрощает наш код и отделяет его от реализаций его зависимостей.
Оба метода облегчают достижение инверсии управления.
Из source:
Включение ресурсов позволяет вводить любой доступный ресурс в JNDI в любой объект, управляемый контейнером, такой как сервлет, предприятие bean или управляемый bean. Например, мы можем использовать ресурс инъекции для ввода источников данных, разъемов или любых других желаемых ресурсы, доступные в пространстве имен JNDI.
Включение зависимостей позволяет нам превращать обычные классы Java в управляемых объектов и вставлять их в любой другой управляемый объект (объекты, которыми управляет контейнер).
Разница между впрыском ресурсов и инъекцией зависимостейразличия между RI и DI перечислены ниже.
Инъекция ресурсов может вводить ресурсы JNDI напрямую, тогда как инъекция зависимостей не может.
Инъекция зависимостей может вводить обычные классы (управляемые bean), тогда как Resource Injection не может.
Инъекция ресурсов разрешается по имени ресурса, тогда как Dependency Injectin разрешается по типу.
Инъекция зависимостей является типичной, тогда как Resoiurce Injection не является.
Ответ Рахул Трипати - точный и правильный. Но, чтобы выразить это более кратким образом, который может помочь вам решить, что использовать, давайте посмотрим на это следующим образом: DI обычно используется для назначения классов реализации интерфейсам. В то время как RI используется для извлечения значений свойств и JDBC-соединений из JNDI. DI позволяет вам писать код против интерфейсов и позже решать, какую реализацию использовать. Существует некоторое перекрытие, как правило, когда объекты RI'd больше, чем просто значение свойства, и когда DI используется для передачи значения свойства. Хорошим примером такого перекрытия, как я уже упоминал, является JDBC-соединения. Соединение JDBC - это не только строка соединения (значения свойств), но и реализация (какие драйверы использовать).
Я думаю, что если вы используете DI и вам нужно передать некоторое значение свойства, просто продолжайте использовать DI. И если вы используете RI и вам нужно передать объект, то, если это возможно, просто сделайте это в RI. В конечном счете, если вы используете оба, то больше XML файлов, которые необходимо заполнить.
Проверьте это: Java EE Injection