Содержание
- 2. Spring Framework :: Связи между объектами Традиционный подход Person Company class Person { public String name;
- 3. Проблемы: Класс А напрямую зависит от класса В; Невозможно тестировать А в отрыве от В (если
- 4. Подход с использованием паттерна Singleton IvanovPerson LuxoftCompany class IvanovPerson extends Person { public Person ivanovPerson =
- 5. Подход с использованием паттерна Singleton IvanovPerson LuxoftCompany Отдельный класс специально под нашу задачу В коде IvanovPerson.create()
- 6. Person Company Подход с использованием IoC ref=“companyReport"/> POJO – plain old Java Object application-context.xml class Person
- 7. Person Company Подход с использованием IoC Преимущества: контейнер создает необходимые объекты и управляет их временем жизни
- 8. Spring Framework :: Связи между объектами A B A B Репозиторий JNDI Имя B_NAME для поиска
- 9. Инверсия управления (Inversion of Control, IoC) — принцип объектно-ориентированного программирования, используемый для уменьшения связанности объектов. Модули
- 10. Spring Framework :: IoC / DI Преимущества IoC контейнеров: Управление зависимостями и применение изменений без перекомпиляции;
- 11. Spring Framework :: Семейство IoC контейнеров BeanFactory – базовый интерфейс, представляющий IoC контейнер в Spring Framework
- 12. Spring Framework :: Семейство IoC контейнеров Существует несколько реализаций ApplicationContext, доступных для использования. Основными являются: GenericXmlApplicationContext
- 13. Spring Framework :: Работа с IoC контейнером В общем виде, работа IoC контейнера Spring может быть
- 14. Spring Framework :: Работа с IoC контейнером Создание контейнера: public void main() { ApplicationContext context =
- 15. Spring Framework :: Работа с IoC контейнером Пример конфигурации: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- 16. Spring Framework :: Создание Bean При помощи конструктора: class="ru.luxoft.training.samples.Example" /> При помощи статического фабричного метода: class="ru.luxoft.training.samples.ClientService"
- 17. Spring Framework :: Отложенная инициализация Для конкретного бина: lazy-init=“true" /> Для всех бинов в контейнере: …
- 18. Упражнения №3: “Hello, World” пример для Spring Framework: 20 мин – самостоятельная работа; 10 мин –
- 19. Spring Framework :: Импорт контекста Часто удобно разбивать контекст на несколько файлов:
- 20. Spring Framework :: Подключение property-файлов к xml-контексту class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> class="org.apache.commons.dbcp.BasicDataSource"> jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.url=jdbc:hsqldb:hsql://production:9002 jdbc.username=sa jdbc.password=root jdbc.properties:
- 21. Spring Framework :: Создание псевдонимов После такой инструкции бин с именем originalName будет также доступен под
- 22. Spring Framework :: DI Внедрение зависимости через конструктор public class ConstructorInjection { private Dependency dep; private
- 23. Spring Framework :: Constructor DI Циклическая зависимость: При Constructor DI для этих классов – BeanCurrentlyInCreationException Решение
- 24. Spring Framework :: Setter DI public class SetterInjection { private Dependency dep; private String descr; public
- 25. Spring Framework :: Autowiring Пример: сервисный класс для получения информации о пользователях UserDirectory LDAPUserDirectory DatabaseUserDirectory MockUserDirectory
- 26. Spring Framework :: Autowiring Теперь включим автоматическое связывание (autowire) class LoginManager { UserDirectory userDirectory; } class
- 27. Spring Framework :: Autowiring Spring может автоматически связывать (добавлять зависимости) между бинами вместо ; В некоторых
- 28. Spring Framework :: Autowiring Типы автоматического связывания: no – запрет на автосвязывание – значение по умолчанию;
- 29. Spring Framework :: Использование аннотаций Контейнер Spring также может быть сконфигурирован с использованием аннотаций; Основные типы
- 30. Spring Framework :: Использование аннотаций @Required Применяется только к SET методам бинов; Определяет что соответствующее свойство
- 31. Spring Framework :: Использование аннотаций @Autowired Применяется к: SET методам бинов; Конструкторам; Методам с несколькими параметрами;
- 32. Spring Framework :: Использование аннотаций @Resource public class SimpleMovieLister { private MovieFinder movieFinder; @Resource(name="myMovieFinder") public void
- 33. Spring Framework :: Использование аннотаций @Component Используется для задания Spring компонент без использования XML конфигурации Применяемся
- 34. Пример использования компонентов: package com.luxoft.calculator; @Service("adder") public class Adder { public int add(int a, int b)
- 35. Spring Framework :: scope бинов Singleton По-умолчанию Один экземпляр бина в контейнере
- 36. Spring Framework :: scope бинов Prototype Каждый раз при внедрении в другой бин или при вызове
- 37. Spring Framework :: Жизненный цикл бина
- 38. Spring Framework :: Жизненный цикл бина Управление бином, реализуя интерфейсы из Spring Создание Реализовать интерфейс InitializingBean
- 39. Spring Framework :: Жизненный цикл бина Управление бином без зависимости от Spring в коде В нужный
- 40. Spring Framework :: Доступ к ApplicationContext Чтобы получить доступ к контексту (например, для публикации своих событий)
- 41. Spring Framework :: События Получение стандартных событий: public class MyBean implements ApplicationListener { public void onApplicationEvent(ApplicationEvent
- 42. Spring Framework :: События Обработка событий внутри ApplicationContext обеспечивается при помощи Класса ApplicationEvent Интерфейса ApplicationListener При
- 43. Spring Framework :: События Пример: регистрация нового сотрудника в компании. Возможные получатели события: - оповещение охранников,
- 44. Spring Framework :: Локализация Интерфейс ApplicationContext наследует интерфейс MessageSource и, соответственно, предоставляет функциональность интернационализации (i18n) При
- 45. Spring Framework :: Локализация messages_en_US.properties customer.name=Ivan Ivanov, age : {0}, URL : {1} messages_ru_RU.properties customer.name=Иван Иванов,
- 46. Spring Framework :: Локализация messages_en_US.properties customer.name=Ivan Ivanov, age : {0}, URL : {1} messages_ru_RU.properties customer.name=Иван Иванов,
- 47. public class CustomerService implements MessageSourceAware { private MessageSource messageSource; public void setMessageSource(MessageSource messageSource) { this.messageSource =
- 48. Spring Framework :: Инициализция коллекций public class Customer { private List lists; private Set sets; private
- 49. 1 public class Customer { private List lists; private Set sets; private Map maps; private Properties
- 50. public class Customer { private List lists; private Set sets; private Map maps; private Properties pros;
- 51. admin@nospam.com support@nospam.com Spring Framework :: Инициализция коллекций public class Customer { private List lists; private Set
- 52. Упражнения Работа со схемой Spring IoC 20 мин – самостоятельная работа; 10 мин – обсуждение;
- 53. class="org.springframework.beans.TestBean"> class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBean" init-method="initialize"> Spring Framework :: Наследование свойств
- 54. administrator@example.com support@example.com sales@example.com support@example.co.uk child.adminEmails= Применимо к properties, list, set, map. administrator=administrator@example.com sales=sales@example.com support=support@example.co.uk Spring Framework
- 55. Spring Framework :: Пустые и null значения
- 56. xmlns:p="http://www.springframework.org/schema/p"> p:email="foo@bar.com" /> p:name="John Doe" p:spouse-ref="jane" /> Spring Framework :: p-namespace
- 57. Spring Framework :: Профили конфигурации GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.getEnvironment().setActiveProfiles("dev"); ctx.load("classpath:/com/bank/config/xml/*-config.xml"); ctx.refresh(); Указание профиля и
- 58. Spring Framework :: Java-based конфигурация @Configuration @Profile(“dev”) public class TransferServiceConfig { @Autowired DataSource dataSource; @Bean public
- 59. Упражнения №4: Разработка простейшего приложения: 50 мин – самостоятельная работа; 10 мин – обсуждение;
- 61. Скачать презентацию