Читаем Изучаем Java EE 7 полностью

• src/main/java — каталог для всех компонентов, квалификаторов, перехватчиков и класса Main;

• src/main/resources — пустой файл beans.xml, поэтому мы можем инициировать CDI без альтернатив и перехватчиков;

• src/test/java — каталог для интеграционных тестов BookServiceIT и альтернативы MockGenerator;

• src/test/resources — файл beans.xml, обеспечивающий работу альтернативы MockGenerator и перехватчика LoggingInterceptor;

• pom.xml — модель объекта проекта Maven (POM), описывающая проект и его зависимости.

<p>Написание классов Book и BookService</p>

Приложение CD-Bookstore использует класс BookService для создания книг (листинг 2.40). Java-объект Book (листинг 2.41) имеет название, описание и цену. Номер книги (ISBN или ISSN) генерируется внешним сервисом.

Листинг 2.40. BookService, использующий внедрение зависимости и перехват

@Loggable

public class BookService {

··@Inject @ThirteenDigits

··private NumberGenerator numberGenerator;

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

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

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

····return book;

··}

}

BookService располагает одним методом, который берет название, цену и описание и возвращает POJO Book. Чтобы задать ISBN-номер книги, этот класс использует внедрение (@Inject) и квалификаторы (@ThirteenDigits) для вызова метода generateNumber, принадлежащего IsbnGenerator.

Листинг 2.41. POJO-объект Book

public class Book {

··private String title;

··private Float price;

··private String description;

··private String number;

··//Конструкторы, геттеры, сеттеры

}

В листинге 2.40 BookService аннотирован связкой с перехватчиком @Loggable (листинг 2.50). Когда эта связка действует, она регистрирует момент входа в метод и выхода из него.

<p>Написание классов NumberGenerator</p>

Класс BookService в листинге 2.40 зависит от интерфейса NumberGenerator (листинг 2.42). Этот интерфейс обладает методом, который генерирует и возвращает номер книги. Интерфейс реализуется классами IsbnGenerator, IssnGenerator и MockGenerator.

Листинг 2.42. Интерфейс NumberGenerator

public interface NumberGenerator {

··String generateNumber();

}

Класс IsbnGenerator (листинг 2.43) сопровождается квалификатором @ThirteenDigits. Это сообщает CDI о том, что сгенерированный номер состоит из 13 цифр. Заметьте, что класс IsbnGenerator также использует внедрение для получения java.util.logging.Logger (произведенного в листинге 2.48) и связывание с перехватчиком @Loggable для регистрации момента входа в метод и выхода из него.

Листинг 2.43. IsbnGenerator генерирует тринадцатизначный номер

@ThirteenDigits

public class IsbnGenerator implements NumberGenerator {

··@Inject

··private Logger logger;

··@Loggable

··public String generateNumber() {

····String isbn = "13-84356-" + Math.abs(new Random(). nextInt());

····logger.info("Сгенерирован ISBN: " + isbn);

····return isbn;

··}

}

Класс IssnGenerator в листинге 2.44 — это восьмизначная реализация NumberGenerator.

Листинг 2.44. IssnGenerator генерирует восьмизначный номер

@EightDigits

public class IssnGenerator implements NumberGenerator{

··@Inject

··private Logger logger;

··@Loggable

··public String generateNumber() {

····String issn = "8-" + Math.abs(new Random(). nextInt());

····logger.info("Сгенерирован ISBN: " + issn);

····return issn;

··}

}

Класс MockGenerator в листинге 2.45 является альтернативой IsbnGenerator (поскольку также сопровождается квалификатором @ThirteenDigits). MockGenerator используется только для интеграционных тестов, так как его можно активизировать только в файле beans.xml тестовой среды (см. листинг 2.55).

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных