Энтони Гонсалвес - Изучаем Java EE 7

Тут можно читать онлайн Энтони Гонсалвес - Изучаем Java EE 7 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2014. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Энтони Гонсалвес - Изучаем Java EE 7 краткое содержание

Изучаем Java EE 7 - описание и краткое содержание, автор Энтони Гонсалвес, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java.
Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода.
Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP). В ней вы найдете максимально ценную информацию, изложенную с точки зрения эксперта по технологиям Java для предприятий.
Благодаря этой книге вы:
— познакомитесь с новейшей версией платформы Java EE;
— исследуете и научитесь использовать API EJB и JPA — от компонентов-сущностей, компонентов-сеансов до компонентов, управляемых сообщениями, и многого другого;
— откроете для себя API для разработки на веб-уровне, в частности JSF, Facelet и Expression Language;
— научитесь обращаться с веб-службами SOAP и RESTful, а также с другими службами, доступными в новейшей версии Java EE;
— узнаете, как создавать динамические пользовательские интерфейсы для корпоративных и транзакционных Java-приложений.

Изучаем Java EE 7 - читать онлайн бесплатно полную версию (весь текст целиком)

Изучаем Java EE 7 - читать книгу онлайн бесплатно, автор Энтони Гонсалвес
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Листинг 2.1. Компонент BookService, использующий внедрение, управление жизненным циклом иперехват

public class BookService {

@Inject

private NumberGenerator numberGenerator;

··@Inject

··private EntityManager em;

··private Date instanciationDate;

··@PostConstruct

··private void initDate() {

····instanciationDate = new Date();

··}

··@Transactional

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····book.setInstanciationDate(instanciationDate);

····em.persist(book);

····return book;

··}

}

Внутренняя организация компонента CDI

В соответствии со спецификацией CDI 1.1 контейнер распознает как компонент CDI любой класс, если:

• он не относится к нестатичным внутренним классам;

• это конкретный класс либо класс, имеющий аннотацию @Decorator;

• он имеет задаваемый по умолчанию конструктор без параметров либо объявляет конструктор с аннотацией @Inject.

Компонент может иметь опциональную область видимости, опциональное EL-имя (EL — язык выражений), набор связок с перехватчиком и опциональное управление жизненным циклом.

Внедрение зависимостей

Java относится к объектно-ориентированным языкам программирования. Это означает, что реальный мир отображается с помощью объектов. Класс Book отображает копию H2G2, Customer замещает вас, а PurchaseOrder замещает то, как вы покупаете эту книгу. Эти объекты зависят друг от друга: книга может быть прочитана покупателем, а заказ на покупку может относиться к нескольким книгам. Такая зависимость — одно из достоинств объектно-ориентированного программирования.

Например, процесс создания книги (BookService) можно сократить до инстанцирования объекта Book, сгенерировав уникальный номер с использованием другого сервиса (NumberGenerator), сохраняющий книгу в базу данных. Сервис NumberGenerator может сгенерировать номер ISBN из 13 цифр либо ISBN более старого формата из восьми цифр, известный как ISSN. BookService затем будет зависеть от IsbnGenerator либо IssnGenerator. Тот или иной вариант определяется условиями работы или программным окружением.

Рисунок 2.3 демонстрирует схему класса интерфейса NumberGenerator, который имеет один метод (String generateNumber()) и реализуется посредством IsbnGenerator и IssnGenerator. Bookservice зависит от интерфейса при генерации номера книги.

Рис 23Схема класса с интерфейсом NumberGenerator и реализациями Как бы вы - фото 17

Рис. 2.3.Схема класса с интерфейсом NumberGenerator и реализациями

Как бы вы соединили BookService с ISBN-реализацией интерфейса NumberGenerator? Одно из решений — использовать старое доброе ключевое слово new, как показано в листинге 2.2.

Листинг 2.2. POJO-объект BookService, создающий зависимости сиспользованием ключевого слова new

public class BookService {

··private NumberGenerator numberGenerator;

··public BookService() {

····this.numberGenerator = new IsbnGenerator();

··}

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····return book;

··}

}

Код в листинге 2.2 достаточно прост и выполняет необходимые действия. BookService создает в конструкторе экземпляр IsbnGenerator, который затем влияет на атрибут numberGenerator. Вызов метода numberGenerator.generateNumber() сгенерирует номер из 13 цифр.

Но что, если вы хотите выбирать между реализациями, а не просто привязываться к IsbnGenerator? Одно из решений — передать реализацию конструктору и предоставить внешнему классу возможность выбирать, какую реализацию использовать (листинг 2.3).

Листинг 2.3. Объект POJO BookService, выбирающий зависимости сиспользованием конструктора

public class BookService {

··private NumberGenerator numberGenerator;

··public BookService(NumberGenerator numberGenerator) {

····this.numberGenerator = numberGenerator;

··}

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····return book;

··}

}

Таким образом, внешний класс смог использовать BookService с необходимой реализацией.

BookService bookService = new BookService(new IsbnGenerator())

BookService bookService = new BookService(new IssnGenerator())

Этот пример иллюстрирует инверсию управления: инвертируется управление созданием зависимости (а не сам класс) между BookService и NumberGenerator, так как оно дается внешнему классу. Поскольку в конце вы соединяете зависимости самостоятельно, эта техника называется конструированием вручную. В предыдущем примере кода мы использовали конструктор для выбора реализации (внедрение конструктора), но еще один привычный способ состоит в использовании сеттеров (внедрение сеттера). Однако вместо конструирования зависимостей вручную вы можете перепоручить эту задачу механизму внедрения (например, CDI).

@Inject

Поскольку Java EE является управляемой средой, вам не придется конструировать зависимости вручную. Вместо вас ссылку может внедрить контейнер. Одним словом, внедрение зависимостей CDI — это возможность внедрять одни компоненты в другие с сохранением безопасности типов, что означает использование XML вместо аннотаций.

Внедрение уже существовало в Java EE 5 с такими аннотациями, как @Resource, @PersistentUnit и EJB. Но оно было ограничено до определенных ресурсов (баз данных, архитектура EJB) и компонентов (сервлетов, компонентов EJB, связующих компонентов JSF и т. д.). С помощью CDI вы можете внедрить практически что угодно и куда угодно благодаря аннотации @Inject. Обратите внимание, что в Java EE 7 разрешено использовать другие механизмы внедрения (@Resource), однако лучше стараться применять @Inject везде, где это возможно (см. подраздел «Производители данных» раздела «Создание компонента CDI» этой главы).

Листинг 2.4 показывает, как внедрять в BookService ссылку на NumberGenerator с помощью объекта CDI.

Листинг 2.4. BookService, использующий @Inject для получения ссылки наNumberGenerator

public class BookService {

··@Inject

··private NumberGenerator numberGenerator;

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····return book;

··}

}

Как видно из листинга 2.4, простая аннотация @Inject у атрибута сообщит контейнеру, что ему необходимо внедрить ссылку на реализацию NumberGenerator, относящуюся к свойству NumberGenerator. Это называется точкой внедрения (место, где находится аннотация @Inject). Листинг 2.5 показывает реализацию IsbnGenerator. Как видите, здесь нет специальных аннотаций, а класс реализует интерфейс NumberGenerator.

Листинг 2.5. Компонент IsbnGenerator

public class IsbnGenerator implements NumberGenerator {

··public String generateNumber() {

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Энтони Гонсалвес читать все книги автора по порядку

Энтони Гонсалвес - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Изучаем Java EE 7 отзывы


Отзывы читателей о книге Изучаем Java EE 7, автор: Энтони Гонсалвес. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x