Skip to content

dalv666/ITIS-JAVA-SPRING-2015

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 

Repository files navigation

ITIS-JAVA-SPRING-2015

Недельный курс по Spring

####Преподаватель: Барух Садогурский

Задания:
Задание№1
  • Написать свою аннотацию, скажем @RunThisMethod
  • У неё должен быть параметр repeat
  • Написать ObjectFactory c методом createObject()
  • Метод получает тип класса, и возвращает объект данного типа, но если в этом классе, есть методы, аннотированные @RunThisMethod.ObjectFactory должна из запустить соотвественно значению параметра repeat
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task1/) ###### Задание№2
  • Написать interface Quoter с методом sayQuote и 2 реализации
  • ShakespearQuoter (c property message) and TerminatorQuoter (messages)
  • По вызову метода sayQuote() они печатаю все сообщения
  • Прописать их как бины в контексте и впрыснуть в xml-e им сообщения
  • Протестировать
    • Создать контекст и сделать поиск
    • Попробовать сделать поиск не только по имени, но и по интерфэйсу.
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task2/) ###### Задание№3
  • Написать интерфэйс с реализацией TalkingRobot у которого будет List и (прописать метод talk, чтобы он делегировал на все методы quote из всех Quoter-ов)
  • Определить этот бин в xml-e и впрыснуть ему оба quoter-a
  • Определить метод talk(), как init-method
  • В тесте только создавать контекст
  • Изменить scope на prototype
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task3/) ###### Задание№4
  • Создать бин класса String, внести в него value (“trust me”)
  • Впрыснуть его в лист цитат терминатора
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task4/)
Задание№5
  • Напишите свой BeanPostProcessor, который будет запускать методы аннотированные @RunThisMethod
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task5/) ###### Задание№6
  • Напишите BeanPostProcessor который будет искать кастомную аннотацию @InjectRandomInt
  • У этой аннотации будут параметры min & max
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task6/) ###### Задание№7
  • Пишем прокси, который будет замерять время вызова метода
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task7/) ###### Задание№8
  • Benchmark, который будет замерять время вызова метода с помощью dynamic proxy
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task8/) ###### Задание№9
  • Напишите свой BeanPostProcessor, который будет печатать сколько времени работал метод аннотированный @Benchmark
  • Аннотация должна находится над классом – и все его методы должны быть завернуты в логику бенчмарка
  • А теперь улучшим наш framework. Теперь аннотация должна считываться с метода, а не класса.
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task9/) ###### Задание№10
  • Напишите еще один BeanPostProcessor который будет делать прокси.
  • Например которые обворачивает транзакцией все методы бинов, класс которых аннотирован @Transaction
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task10/) ###### Задание№11
  • Прикрутите дополнительный компонент, который будет выводить лог названия всех destroy методов определенных для прототайпов, с предупреждением, что они работать не будет
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task11/)

##День второй

Задание№12
  • Напишите собственную аннотацию, которая будет расширять @Deprecated. Данную аннотацию будут ставить над устаревшими классами
  • У этой аннотации будет параметр newClass указывающий на новую имплементацию
  • Напишите BeanFactoryPostProcessor, который будет заменять все устаревшие классы на новые
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task12/)
Задание№13
  • Напишите FactoryBean для чего нибудь (например, StringBuilder)
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/Task13/) ###### Задание№14
  • Напишите singleton в который впрыснут prototype.
  • Проверьте, когда обновляется prototype
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task14/) ###### Задание№15
  • Напишите 2 аннотации @Oracle и @Derby
  • Напишите 2 класса имплементирующие интерфейс Dao с методом crud()
  • Один из классов является имплементаций оракла, второй дерби
  • Укажите это при помощи собственных аннотаций
  • Напишите сервис, в с проперти Dao и инжекните в него один раз имплементацию оракла, а второй дерби, при помощи собсвенных аннотаций
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task15/)
Задание№16
  • Напишите свой DatabaseRuntimeException
  • Мэйлы всех работников DBA должны впрыскиваться в аспект
  • Попробуйте чтобы stack trace исключения был глубже чем один
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task16/)
Задание№17
  • Напишите аспект, который будет перехватывать все методы возвращающий объекты аннотированные @MyDeprecated и будет заменять то, что должно вернуться, на объект из нового класса, указанный в аннотации.
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task17/) ###### Задание№18
  • Напишите свою аннотацию @PostInitialized
  • Пропишите свой ContextListener, чтобы он по contextRefreshed, запускал все методы, аннотированные этой аннотацией
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task18/)

##День третий

Задание№19
  • Пишем систему регистраций на эвент
  • Модель: Классы для эвента, гостя, заказа, и .т.д
  • Сервис: Бизнес методы: зарегистрироваться, посмотреть список гостей
  • Репозиторий: Работа с JDBC Template для реализации доступа к данным
  • База данных: embedded h2 - compile 'com.h2database:h2:1.4.186'
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task19/)
Задание№20
  • Сделайте тоже самое, но используя Java Config
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task20/)
Задание№21
  • Напишите класс Водитель
  • Имя не может быть null
  • Не пьющий
  • Проверьте валидатором объект водителя и распечатайте все ошибки
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task21/)
Задание№22
  • А теперь напишите Taxi, в который будет впрыскиваться валидный Driver
  • Проверьте при помощи валидатора, что Taxi валидный.
  • В данном случае это значит, что водитель, который в него впрыснут прошел все проверки
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task22/)
Задание№23
  • Написать кастомную аннотацию @ValidCredentials
  • Которая будет проверять что у объекта логин пароль не длиннее, чем имя
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task23/)

##День последний

Задание№24
  • Сконфигурируйте проект
  • Смэпите простой файл
  • Создайте controller для /hello
  • Верните jsp
  • Попробуйте всякие другие маппирования
  • Добавляем контроллер посложнее, который принимает параметр в URL и показывает его обратно пользователю
  • Также, печатает все header-ы
  • Напишите хэндлер, который принимает текст и отправляет его обратно
  • Напишите хэнлдер, который принимает JSON, делает из него объект, и отправляет обратно JSON-ом.
  • А теперь принимает XML а отправляет обратно JSON-ом.
  • Напишите тесты с помощью HttpClient
  • Переведите все стринговые методы на работу с HttpEntity
  • Переведите метод, который создает объект на работу с HttpEntity. Также, пусть он проставляет Location header и возвращает код 201(Created).
  • Пропишите SimpleMappingExceptionResolver
  • Напишите контроллер который кидает исключение, которое вы прописали и проверьте, что маппинг работает
  • Реализуйте метод @ExceptionHandler
  • Создайте класс модели, который мы будем использовать для связки данных
  • Наполните его из параметров запроса
  • Попробуйте с HTML формой
  • Перепишите форму с этим taglib-ом
  • Добавьте тэгов ошибок для демонстрации ошибок конверсии
  • Добавьте чекбокс
######Исходники: [sources](/src/main/java/su/dalv/itis/java/spring/task24/)

About

ITIS-JAVA-SPRING-2015

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages