The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Вступительная лекция по Java. История появления, идеи, сферы применения, место среди других языков, экосистема. Структурированная информация о Java, как о языке программирования.
Под эту лекцию имеется более развёрнутый материал. Кому интересно - пишите.
Конструктивная критика приветствуется.
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Вступительная лекция по Java. История появления, идеи, сферы применения, место среди других языков, экосистема. Структурированная информация о Java, как о языке программирования.
Под эту лекцию имеется более развёрнутый материал. Кому интересно - пишите.
Конструктивная критика приветствуется.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Готов ли JUnit 5 к использованию в production? Как на него перевести большой проект и сделать тесты лаконичнее? В своем докладе я выскажу свои мысли о концепциях, заложенных в JUnit 5 и поделюсь нашим успешным опытом миграции на новую платформу
Многие из нас слышали, что при создании тестовых систем необходимо понимать из каких слоев они должны состоять. Но начинающим специалистам очень сложно четко понять за чем эти слои нужны и какие функции они выполняют. В своем докладе я хотел бы внести ясность по данному вопросу и ответить на все все вопросы.
2. Содержание курса
1. Аннотации
2. Применение аннотаций
3. Примеры
4. Стандартные аннотации
5. Собственные аннотации
6. Параметры аннотации
7. Класс SimpleService
8. Класс LazyService
9. Обработчик аннотаций
10. Чтение аннотаций
3. Аннотации
• Метаданные, описывающие код
• Хранятся внутри кода
• Не влияют на код напрямую – нужен как
минимум обработчик аннотаций
Альтернатива аннотациям – XML (описание
хранится вне кода)
4. Применение аннотаций
• Информация для компилятора (@Deprecated etc)
• Генерирование документации, файлов
• Обработка во время выполнения
5. Примеры
@Bean(“MyBean”)
public class MyClass {
@Deprecated
private int oldValue;
@Override
public String toString() {…}
}
Свойства аннотаций могут
быть помечены ключами
(key=“Value”), а могут быть и
без них
6. Стандартные аннотации
@Deprecated – говорит компилятору, что метод не
используется
@Override – переопределяет метод суперкласса,
иначе ошибка компиляции
@SupressWarnings (“…”) – убирает warning,
указанные свойствах
Распространенные аннотации других библиотек:
@Test (@Before, @After)
@Transactional, @Entity, @Autowire
7. Собственные аннотации
public @interface Service {
String name(); //становится обязательным свойством
Boolean lazyLoad() default false;
}
Сходство с интерфейсами:
•Указываем методы, которые возвращают значения
•Экземпляр аннотации создать нельзя
8. Собственные аннотации
• Методы всегда начинаются с маленькой буквы
• Методы не принимают аргументов
• Имя метода становится свойством аннотации
• Допустимы примитивные типы, String и массивы
• Cвойства со спецификатором default не
обязательно упоминать в аннотации
9. Параметры аннотации
Аннотации над аннотациями:
@Documented
Информация об аннотации и классе попадает в Javadoc
@Inherited
Данная аннотация наследуется потомками класса. Без неё override
методы теряют нотацию в дочернем классе.
@Target (ElementType.TYPE) - Область применения
ElementType.TYPE – над классами и интерфейсами
@Retention (RetentionPolicy.RUNTIME) - Время жизни
RetentionPolicy.RUNTIME – означает, что аннотация будет
жить также и в Runtime
10. Параметры аннотации
Аннотации над аннотациями:
@Target
ElementType.ANNOTATION_TYPE – только над другими
аннотациями
ElementType.CONSTRUCTOR – только над конструктором
ElementType.FIELD – только над полем класса
ElementType.LOCAL_VARIABLE – только над локальной переменной
метода
ElementType.METHOD - только над методом
ElementType.PACKAGE – расспространяется на весь пакет
ElementType.PARAMETER – перед аргументом метода
ElementType.TYPE – аннотация может присутствовать над классом
или интерфейсом
11. Параметры аннотации
Аннотации над аннотациями:
@Retention
RetentionPolicy.SOURCE – может присутствовать только в исходном
коде. Ни компилятор, ни интерпритатор не будут о ней знать.
Используется для документации.
RetentionPolicy.CLASS – видна только во время компиляции
RetentionPolicy.RUNTIME - видна только в runtime
12. Параметры аннотации
Пример:
Нужно загрузить, классы помеченные аннотацией
Service.
@Target(ElementType.Method)
@Retention(RetentionPolicy.Runtime)
Public @interface Init {
boolean suppressException() default false;
}
Создавая объект, вызываем все методы
помеченные аннотацией Init. На основании
suppressException будем либо обрабатывать
исключение, либо пробрасывать его дальше.
13. Параметры аннотации
Если lazyLoad == true, то не будем вызывать
методы Init
SimpleService
+initService()
LazyService
+lazyInit() throws Exception
14. Класс SimpleService
@Service (name="SuperSimpleService")
public class SimpleService {
protected int id;
private String description = "The dscription of SimpleService";
@Init
public void initService(){
System.out.println("SimpleService.initService() started");
}
public void doNothing(){
System.out.println("SimpleService.doNothing() started");
}
private String getDescription(){
return description;
}
protected int getId(){
return id;
}
}
15. Класс LazyService
@Service (name="VeryLazyService")
public class LazyService {
@Init
public void lazyInit() throws Exception{
System.out.println("LazyService.lazyInit() started");
}
}
Для чего же нужны аннотации?
Если хотим через аннотации помечать куски кода и динамически их обрабатывать.
16. Обработчик аннотаций
AnnotationProcessor.java
public class AnnotationProcessor {
public static void main(String[] args){
inspectService(SimpleService.class);
inspectService(LazyService.class);
inspectService(String.class);
}
static void inspectService(Class<?> service){…}
}
17. Чтение аннотаций
Можно вызывать следующие методы у объекта класса Class, Field или Method
Boolean isAnnotationPresent( Class <? extends Annotation> ann);// проверяет
наличие аннотаций в указанном классе
A getAnnotation(Class<A> ann); //возвращает аннотацию по имени классас
установленными параметрами аннотации
Annotation[] getAnnotations(); //возвращает все аннотации, включая inherrited
родительские аннотации
Annotation[] getDeclaredAnnotations(); //возвращает все аннотации
определенные вашем коде
18. Чтение аннотаций
…
if (service.isAnnotationPresent(Init.class)){
Service ann = service.getAnnotation(Service.class);
System.out.println("Service annotation name = " + ann.name());
System.out.println("Service annotation lazyLoad = " + ann.lazyLoad());}
Else {
System.oum.printl(“No service annotation in class” + Service.class)
}
…