Spring Core Flashcards

1
Q

Что такое Spring Framework?

A

Spring framework обеспечивает решения многих задач, с которыми сталкиваются Java-разработчики и организации, которые хотят создать информационную систему, основанную на платформе Java. Spring Framework всецело не связан с платформой Java Enterprise, несмотря на его масштабную интеграцию с ней, что является важной причиной его популярности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие преимущества Spring Framework?

A
lightweight
Inversion of control IoC
Aspect oriented (AOP)
Container
MVC Framework
Transaction Management
Exception Handling
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие есть модули в Spring Framework

A
Core
-Beans
-Core
-Context
-SpEL
AOP
Aspects
Instrumentation
Messaging
Web
-webSocket
-Web
-Servlet
-Portlet
Data Access/Integration
-JDBC
-ORM
-OMX
-JMS
-Transaction
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие модули Spring часть 2

A

IoC container - конфигурирование компонентов приложений и управление жизненым циклом Java-объектов
AOP - работает с функциональностью, которая может быть реализованна возможностями объектно-ориентированного программирования на Java без потерь
Security - конфигурируемый инструментарий процессов аутентификации и авторизации, поддерживающий много протоколов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какие модули Spring часть 3

A

Data Access - работает с системами управления реляционными базами данных на Java платформе, используя JDBC и ORM средства
Trasaction Management - координация различных API управления транзакциями.
MVC - каркас, основанный на HTTP и сервлетах, предоставляющий множество возможностей для расширения и настройки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что собой представляет Core Container?

A
Это базовый Spring модуль, который представляет фундаментальные части функциональности Spring:
IoC
Beans
Context
Spring expression
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое IoC?

A

Инверсия управления - это общее понятие, которое отличает библиотеку от фреймворка. Подразумевает что вызывающий код контролирует внешнее окружение и время и порядок вызова библиотечных методов. Однако, в случае фреймворка обязанности меняются местами: фреймворк предоставляет некоторые точки расширения, через которые он вызывает определенные методы пользовательского кода.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое DI?

A

Все зависимости, требуемые некоторому классу, передаются в качестве параметров конструктора, представленных в виде интерфейсов или абстрактных классов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие есть типы IoC?

A

Constructor-based
Setter-based
Interface-based

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

В чем отличие между DI и IoС?

A

Инверсия зависимости это принцип ООП, который служит для уменьшения связанности слоев сложных приложений.
DI контейнер это реализация, которая позволяет применит принцип инверсии зависимостей. Она знает о всех интерфейсах и их реализациях в системе и умеет их сопоставлять.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое Spring Beans?

A

Это объекты, которые представляют модель вашего приложения, которыми управляет spring контейнер.
У bean есть имя, scope, способ инициализации, свойства, способ связывания.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое BeanFactory?

A

Это реализация шаблона Фабрика, которая применяется к IoC чтобы отделить конфигурацию приложения и зависимости в программном коде.
Например XMLBeanFactory загружает beans, определения которые находятся в XML файле

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Какие вы знаете реализации BeanFactory?

A
XMLBeanFactory
SimpleJndiBeanFactory
ClassPathXmlAppliccationContext
XmlWebApplicationContext
AnnotationConfigWebApplicationContext
AnnotationConfigApplicationContext
FileSystemXmlApplicationContext
StaticWebApplicationContext
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое Application Context?

A

Это интерфейс, который предоставляет конфигурацию приложения. Доступен только для чтения во время выполнения.
Предоставляет:
Factory methods бинов для доступа к компонентам;
Создавать события и регистрировать слушателей;
Загружать файлы конфигурации;
Наследуется от родительского контекста;
поддержка i18n интернализации.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Чем отличается Application Context от BeanFactory?

A

Bean Factory
инициализирует и делает инъекции бинов.
Application Context
инициализирует и делает инъекции бинов, сообщений и обработку событий;
Автоматически регистрирует BeanPostProcessor, BeanFactoryPostProcessor;
Источник событий, доступ к источнику событий.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Какие есть три способа для того что предоставить конфигурационные метаданные Spring контейнеру?

A

Конфигурационный файл XML*
Аннотации
Java конфигурации

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Как определить scope свойства бина?

A

Используя атрибут scope

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Какие типы scope бинов в Spring?

A

Session - жизненный цикл экземпляра ограничен в пределах одной и той же HTTP Session
Global-session Жизненный цикл экземпляра ограничен в пределах глобальной HTTP Session
Singleton - единый объект на контейнер (по умолчанию)
Prototype - любое количество объектов
Request - ЖЦ ограничен единственным HTTP запросом; для каждого нового запроса создается новый экземпляр бина.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Является ли singleton bean в Spring потокобезопасным?

A

Нет, он не thread-safe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Опишите жизненный цикл bean в Spring framework

A

Контейнер находит бины в XML;
Делаются настройки которые определены для бина;
Вызываются методы setBeanName() если бин реализует BeanNameAware
postProcessorBeforeInitialization();
Вызывается afterPropertySet() если бин реализует InitializingBean
postProcessAfterInitialization()
Если реализуется DisposableBean - вызывается destroy()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Что такое inner bean?

A

Когда бин используется только как свойство другого бина, он определяется как inner bean.

22
Q

Как сделать инъекции Java Collection объектов в Spring?

A

Используя специальные теги:

используется для String пара имя-значение.

23
Q

Что такое bean wiring?

A

Это случай когда бины сочетаются вместе в Spring контейнере. В этом случае Spring контейнер должен знать, какие бины нужны и как использовать DI для объединения вместе.

24
Q

Что такое auto-wiring?

A

Это разрешения Spring автоматически определять связь между бинами, через анализ BeanFactory, без использования аргументов конструктора или элементов.

25
Q

Что предоставляет аннотация @Autowiring?

A

Предоставляет полный контроль над тем как и куда Spring должен сделать инъекцию. Может исльзоватся для полей , сеттеров.

26
Q

Какие есть модели auto-wiring?

A

По имени(by Name)(по умолчанию)
По типу(by Type)
Через конструктор
Автоопределение

27
Q

Может ли приложение иметь более одного Spring Container?

A

Да, может.
В web приложениях Spring есть два типа контейнеров.
Один - Application Context - инициализируется через ContextLoaderListener или ContextLoaderServlet.
Дригие - Web Application Context - по одному на каждый DispatcherServlet.

28
Q

Какие есть ограничения для autowiring?

A

Overriding: или всегда будут переопределять auto-wiring.

Нельзя делать инъекции через auto-wiring для примитивов строк и классов

29
Q

Как включить wiring на основе аннотаций?

A

В файле конфигураций Spring прописать:

30
Q

Для чего используется аннотация Qualifier?

A

Используется вместе с Autowired когда нужно делать инъекции одинакового типа. Принимает String параметр.

31
Q

Для чего используется аннотация @Bean?

A

Аннотация @Bean используется для указания того, что метод создает, настраивает и инициализирует новый объект, управляемый Spring IoC контейнером.

32
Q

Для чего предназначена аннотация @Required?

A

Применяет к аргументу setter-метода в бине и указывает на то, чтобы соответствующее свойство бина было установлено на момент конфигурирования значением из определения бина иди автоматического связывания. Если же знаение не будет установлено, будет выброшено исключение.
Использование аннотации позволит избежать NullPointerException в процессе использования свойства бина.

33
Q

Для чего предназначена аннотация @Component?

A

Общая аннотация для любого пользовательского компонента Spring приложения

34
Q

Какие есть наследники у аннотации @Component?

A

@Service(Сервис-слой приложения)
@Repository(Доменный слой)
@Controller(Слой представления)

35
Q

Какое предназначение аннотаций @Scope, @PostConstract, @PreDestroy?

A

@Scope - аннотация для установки области жизни бина
@PostConstract Аннотация для метода, который будет вызван после вызова конструктора бина.
@PreDestroy - Аннотация для метода который будет вызван перед уничтожением бина.

36
Q

Как совместить конфигурацию через XML и аннотацию?

A

@ImportResourse, в параметрах которой указать нужное количество XML - конфигураций
@ImportResourse(“classpath:/lessons/xml-config.xml”)

37
Q

Назовите все способы объявления бина?

A

Используя XML

Используя аннотации:
@Bean
@Named
@Component
@Service
@Repository
38
Q

Способы получения бина

A

Через контекст

Через bean wiring

39
Q

Какие стандартные JSR-330 аннотации?

A
@Inject
@Named
@Scope
@Qualifier
@Singleton
40
Q

Что такое профили?

A

Профиль - это именованная группа бинов, зарегистрированных контейнером только в том случае, если профиль активен.

41
Q

Как происходит обработка событий в Spring Framework?

A

Обработка событий в ApplicationContext предоставляется через класс ApplicationEvent и интерфейс ApplicationListener. Если бин реализует ApplicationListener и развернут в контексте, то каждый раз, когда ApplicationEvent публикуется в ApplicationContexnt, уведомляется бин. Фактически, это реализация стндартного шаблона Observer.

42
Q

Какие есть стандартные события в Spring Framework?

A
ContextRefreshedEvent
ContextStartedEvent
ContextStopedEvent
ContextClosedEvent
RequestHandledEvent - Применимо только для web-приложений с использованием Spring DispatcherServlet
43
Q

Как создать собственное событие в SpringFramework?

A

Расширить класс ApplicationEvent

44
Q

Как опубликовать событие?

A

Для публикации необходимо вызвать метод ApplicationEventPublisher#publishEvent(). Обычно это делается созданием класса, который реализует ApplicationEventPublisherAware и регистрируется как Spring bean.

45
Q

Как объединить несколько xml файлов конфигурации spring?

A

используя тег import

используя аннотацию @ImportResourse

46
Q

Можно ли назвать Spring scope “singleton” GOF синглтоном?

A
Нет, шаблон Singleton описывается как один класс (соотв. один объект) на один загрузчик(class loader) - то есть одну JVM
А в Spring scopre singleton определяется в контейнере, и может быть в Spring приложении несколько контейнеров, которые используют один и тот же class loader.
47
Q

Как установить для Spring bean больше одного имени?

A

используя тег

48
Q

Как закрыть Spring контейнер?

A

Используя ApplicationContext

(ConfigurableApplicationContext)appCtx).close(

49
Q

Как использовать в конигурации Spring конфигурации с Properties файла?

A

jdbc.username=root
Конфигурация в Spring xml

${ jdbc.username}
50
Q

Что случиться если будет циклическая зависимость в конструкторе Бинов?
Bean A зависит от bean B
Bean B зависит от bean A

A

Ошибки не будет

Spring сначала создаст bean затем сделает injection бинов друг к другу