public class MyServlet extends HttpServlet {
@Resource(name="java:comp/DefaultDataSource")
private javax.sql.DataSource dsc;
...
}
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Инъецирование ресурсов позволяет инъецировать любой ресурс, доступный в пространстве имён JNDI, в любой объект, управляемый контейнером — в сервлет, Enterprise-бин или Managed-бин. Например, вы можете использовать инъецирование ресурсов для инъецирования источников данных, коннекторов или кастомных ресурсов, доступных в пространстве имён JNDI.
Обычно для ссылки на инъецируемый объект используется его интерфейс, отделяющий ваш код от реализации ресурса.
Например, следующий код инъецирует объект источника данных, обеспечивающий соединение с базой данных Apache Derby, предустановленной в GlassFish Server:
public class MyServlet extends HttpServlet {
@Resource(name="java:comp/DefaultDataSource")
private javax.sql.DataSource dsc;
...
}
В дополнение к инъецированию на основе полей, как в предыдущем примере, вы можете использовать инъецирование ресурсов на основе методов:
public class MyServlet extends HttpServlet {
private javax.sql.DataSource dsc;
...
@Resource(name="java:comp/DefaultDataSource")
public void setDsc(java.sql.DataSource ds) {
dsc = ds;
}
}
Чтобы использовать инъецирование на основе метода, set-метод должен следовать соглашениям JavaBeans для имён свойств: имя метода должно начинаться с set
, иметь возвращаемый тип void
и иметь только один параметр.
Аннотация @Resource
находится в пакете javax.annotation
и определена в JSR 250 (Common Annotations for the Java platform). Инъецирование ресурсов происходит по имени, поэтому оно не является типобезопасным (typesafe): тип объекта ресурса неизвестен на этапе компиляции, поэтому вы можете получить ошибки времени выполнения, если типы объекта и его ссылки не совпадут.
Назад | Вперёд | Содержание |