Spring Flashcards
Что такое JSF
JavaServer Faces (JSF) — это фреймворк для веб-приложений, написанный на Java. для облегчения разработки пользовательских интерфейсов для Java EE-приложений. JSF основывается на использовании компонентов
Расскажите о Spring Framework.
универсальный фреймворк с открытым исходным кодом для Java-платформы.замена модели Enterprise JavaBeans.
преимуществa Spring Framework
независимые друг от друга компоненты, что дает преимущества в командной разработке, переносимости модулей и т.д..
Проект Spring содержит в себе множество подпроектов, которые затрагивают важные части создания софта, такие как вебсервисы, веб программирование, работа с базами данных, загрузка файлов, обработка ошибок и многое другое. Всё это настраивается в едином формате и упрощает поддержку приложения.
Dependency Injection (DI)
Внедрение зависимости (Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления» ( Inversion of control, IoC),
через конструктор либо через сеттер
Spring модули
1) Inversion of Control-контейнер: конфигурирование компонентов приложений и управление жизненным циклом Java-объектов.
2) Фреймворк доступа к данным: через JDBC- и ORM-средства
3) транзакции
4) MVC
5) Security
6) Тестирование
7) Spring cloud
8) REST
AOP
возможность реализации сквозной логики. Подход Spring к АОП заключается в создании “динамических прокси” для целевых объектов и “привязывании” объектов к конфигурированному совету для выполнения сквозной логики.
Что такое joinpoint АОП?
места в приложении, в которые можно вставлять дополнительную логику с использованием АОП.
Что такое advice АОП?
Фрагмент кода, который должен выполняться в отдельной точке соединения, представляет собой advice.
Что такое pointcut АОП (срез он же перхватчик)?
срез, представляет собой коллекцию всех точек соединения Method Invocation в отдельном классе. Часто между срезами можно установить сложные отношения, чтобы обеспечить дополнительные ограничения на то, когда будет выполнен совет.
Что такое aspect АОП?
это комбинация совета и срезов.
Что такое weaving АОП?
процесс действительной вставки аспектов в определенную точку кода приложения. Для решений АОП времени компиляции это делается на этапе компиляции, обычно в виде дополнительного шага процесса сборки
разница между Spring AOP и AspectJ АОП?
AspectJ используется когда нужно привязаться не только к полям но и к методам или к обьектам
Spring AOP немного проще, он поддерживает аннотации AspectJ,
Недостатком Spring AOP является работа только со своими бинами, которые существуют в Spring Context.
IoC контейнер Spring?
IoC предоставляет службы, через которые компоненты могут получать доступ к своим зависимостям, и службы для взаимодействия с зависимостями в течение их времени жизни
Что такое Spring бин?
любой компонент, управляемый контейнером
конфигурационный файл Spring Bean?
определяет все бины, которые будут инициализированы в Spring Context. При создании экземпляра Spring ApplicationContext будет прочитан конфигурационный xml файл и выполнены указанные в нем необходимые инициализации. .
способы настроить класс как Spring Bean?
1)XML конфигурация:
2)Java based: @Configuration @ComponentScan(value="ru.javastudy.spring.main") public class MyConfiguration { @Bean public MyService getService(){ return new MyService(); } }
3)Annotation based:
@Component, @Service, @Repository, @Controller
scope у Spring Bean?
singleton — может быть создан только один экземпляр бина. Этот тип используется спрингом по умолчанию, если не указано другое. Следует осторожно использовать публичные свойства класса, т.к. они не будут потокобезопасными.
prototype — создается новый экземпляр при каждом запросе.
request — аналогичен prototype, но название служит пояснением к использованию бина в веб приложении. Создается новый экземпляр при каждом HTTP request.
session — новый бин создается в контейнере при каждой новой HTTP сессии.
global-session: используется для создания глобальных бинов на уровне сессии для Portlet приложений.
жизненный цикл Spring Bean?
@PostConstruct
public void init(){
System.out.println(“Bean init method called”);
}
@PreDestroy public void destroy(){ System.out.println("Bean destroy method called"); }
@Autowired?
Считается хорошей практикой задавать явные связи между зависимостями, но в Spring предусмотрен дополнительный механизм связывания @Autowired. Аннотация может использоваться над полем или методом для связывания по типу. Чтобы аннотация заработала, необходимо указать небольшие настройки в конфигурационном файле спринг с помощью элемента context:annotation-config.
Является ли Spring бин потокобезопасным?
о умолчанию бин задается как синглтон в Spring. Таким образом все публичные переменные класса могут быть изменены одновременно из разных мест. Так что — нет, не является. Однако поменяв область действия бина на request, prototype, session он станет потокобезопасным, но это скажется на производительности.
Что такое контроллер в Spring MVC?
управление, связь между моделью и видом. обрабатывает запросы
@Component
используется для указания класса в качестве компонента спринг. При использовании поиска аннотаций, такой класс будет сконфигурирован как spring bean.
@Controller
пециальный тип класса, применяемый в MVC приложениях. Обрабатывает запросы и часто используется с аннотацией @RequestMapping.
@Repository
указывает, что класс используется для работы с поиском, получением и хранением данных. Аннотация может использоваться для реализации шаблона DAO.
@Service
указывает, что класс является сервисом для реализации бизнес логики (на самом деле не отличается от Component, но просто помогает разработчику указать смысловую нагрузку класса).
DispatcherServlet в MVC
сервлет диспетчера в MVC. Этот сервлет анализирует запросы и направляет их соответствующему контроллеру для обработки. В Spring MVC класс DispatcherServlet является центральным сервлетом, который получает запросы и направляет их соответствующим контроллерам. В приложении Spring MVC может существовать произвольное количество экземпляров DispatcherServlet, предназначенных для разных целей (например, для обработки запросов пользовательского интерфейса, запросов веб-служб REST и т.д.). Каждый экземпляр DispatcherServlet имеет собственную конфигурацию WebApplicationContext, которая определяет характеристики уровня сервлета, такие как контроллеры, поддерживающие сервлет, отображение обработчиков, распознавание представлений, интернационализация, оформление темами, проверка достоверности, преобразование типов и
ContextLoaderListener
слушатель при старте и завершении корневого класса Spring WebApplicationContext. Основным назначением является связывание жизненного цикла ApplicationContext и ServletContext, а так же автоматического создания ApplicationContext. Можно использовать этот класс для доступа к бинам из различных контекстов спринг. Настраивается в web.xml:
contextConfigLocation /WEB-INF/spring/root-context.xml org.springframework.web.context.ContextLoaderListener
WEB-INF папка
Папка WEB-INF служит хранилищем для файлов, к которым закрыт прямой доступ из адресной строки. Существует специальное понятие внутренних ресурсов, которые не доступны извне.
Поместив ваши представления в папку WEB-INF/view/*.jsp вы скроете представления и доступ к ним можно будет получить только из контроллера.
MultipartResolver в Spring?
Интерфейс MultipartResolver используется для загрузки файлов. Пару раз сталкивался - там еще бин с максимальным размером файла настраивается
ApplicationContext и WebApplicationContext
Spring загружает файл applicationContext.xml и создает ApplicationContext для всего приложения.
в одном веб-приложении может быть несколько WebApplicationContext. Говоря простыми словами, каждый DispatcherServlet связан с одним WebApplicationContext.
ApplicationContext предоставляет:
Фабричные методы бина для доступа к компонентам приложения
Возможность загружать файловые ресурсы в общем виде
Возможность публиковать события и регистрировать обработчики на них
Возможность работать с сообщениями с поддержкой интернационализации
Наследование от родительского контекста
Можем ли мы иметь несколько файлов конфигурации Spring?
С помощью указания contextConfigLocation можно задать несколько файлов конфигурации Spring. Параметры указываются через запятую или пробел:
Как проверить (валидировать) данные формы в Spring Web MVC Framework?
@Size(min=2, max=30)
private String name;
@NotEmpty @Email private String email; @NotNull @Min(18) @Max(100) private Integer age; @NotNull private Gender gender; @DateTimeFormat(pattern="MM/dd/yyyy") @NotNull @Past private Date birthday;
Spring MVC Interceptor и как он используется?
Перехватчики в Spring (Spring Interceptor) позволяют перехватывать запросы клиента и обрабатывать их. Перехватить запрос клиента можно в трех местах: preHandle, postHandle и afterCompletion.
Для создания обработчика необходимо расширить абстрактный класс HandlerInterceptorAdapter или реализовать интерфейс HandlerInterceptor. Так же нужно указать перехватчики в конфигурационном файле Spring.
JdbcTemplate
Инструмент для работы с БД JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); Object[] args = new Object[] {employee.getId(), employee.getName(), employee.getRole()};
int out = jdbcTemplate.update(query, args);
Как интегрировать Spring и Hibernate?
Для интеграции Hibernate в Spring необходимо подключить зависимости, а так же настроить файл конфигурации Spring.
SpringBoot
Spring Boot. Он имеет заранее подготовленные куски конфигурации, которые активируются в зависимости от различных условий. Например, если у вас в classpath есть Hibernate, то бины для работы Spring и Hibernate настраиваются автоматически
ПРимер кода AOP
Define a custom annotation;
@Target({ElementType.TYPE ,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface Loggable {
}
Annotate your method that you want to intercept ;
@Service public class MyAwesomeService {
@Loggable public void myAwesomemethod(String someParam) throws Exception { // do some awesome things. } } Add aspect dependencies to your pom.
org.springframework spring-aop org.aspectj aspectjweaver
and define your aspects class ;
@Aspect
@Component
public class LoggingHandler {
@Before("@annotation(com.example.annotation.Loggable)") public void beforeLogging(JoinPoint joinPoint){ System.out.println("Before running loggingAdvice on method="); } @After("@annotation(com.example.annotation.Loggable)") public void afterLogging(JoinPoint joinPoint){ System.out.println("After running loggingAdvice on method="); } }
CRUD
Когда мы работает с базами данных (далее – БД), то обычно чаще всего нам необходимо выполнить одно из 4 действий: создать, прочитать, изменить либо удалить (для этого набора действий существует аббревиатура CRUD – Create Read Update Delete)
А без спринг бут работали?
Позвонить Вадику и узнать как в ручную это настраивать
расскажите про Spring MVC
обеспечивает архитектуру паттерна Model — View — Controller
Вся логика работы Spring MVC построена вокруг DispatcherServlet, который принимает и обрабатывает все HTTP-запросы (из UI) и ответы на них
После получения HTTP-запроса DispatcherServlet обращается к интерфейсу HandlerMapping, который определяет, какой Контроллер должен быть вызван, после чего, отправляет запрос в нужный Контроллер.
Контроллер принимает запрос и вызывает соответствующий служебный метод, основанный на GET или POST. Вызванный метод определяет данные Модели, основанные на определённой бизнес-логике и возвращает в DispatcherServlet имя Вида (View).
При помощи интерфейса ViewResolver DispatcherServlet определяет, какой Вид нужно использовать на основании полученного имени.
После того, как Вид (View) создан, DispatcherServlet отправляет данные Модели в виде атрибутов в Вид, который в конечном итоге отображается в браузере.
расскажите о Security
Ключевые объекты контекста Spring Security:
SecurityContextHolder - информация о текущем контексте безопасности.используетThreadLocal для хранения такой информации, что означает, что контекст безопасности всегда доступен для методов исполняющихся в том же самом потоке.
SecurityContext, содержит объект Authentication и в случае необходимости информацию системы безопасности, связанную с запросом от пользователя.
GrantedAuthority отражает разрешения выданные пользователю в масштабе всего приложения, такие разрешения (как правило называются «роли»), например ROLE_ANONYMOUS, ROLE_USER, ROLE_ADMIN.
UserDetails предоставляет необходимую информацию для построения объекта Authentication из DAO объектов приложения или других источников данных системы безопасности. Объект UserDetailsсодержит имя пользователя, пароль, флаги: isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled и Collection — прав (ролей) пользователя.
UserDetailsService, используется чтобы создать UserDetails объект путем реализации единственного метода этого интерфейса. Позволяет получить из источника данных объект пользователя и сформировать из него объект UserDetails который будет использоваться контекстом Spring Security.
Аутентификация
(1) Пользователю будет предложено войти в систему предоставив имя (логин или email) и пароль. Имя пользователя и пароль объединяются в экземпляр класса UsernamePasswordAuthenticationToken(экземпляр интерфейса Authentication) после чего он передается экземпляру AuthenticationManager для проверки.
(2) В случае если пароль не соответствует имени пользователя будет выброшено исключение BadCredentialsException с сообщением “Bad Credentials”.
(3) Если аутентификация прошла успешно возвращает полностью заполненный экземпляр Authentication.
(4) Для пользователя устанавливается контекст безопасности путем вызова метода SecurityContextHolder.getContext().setAuthentication(…), куда передается объект который вернул AuthenticationManager.
расскажите о спрингРест
@Controller используется для обозначения классов как Spring MVC Controller.
@RestController - удобная аннотация, которая делает не что иное, как добавление аннотаций @Controller и @ResponseBody
@ResponseBody
Если необходимо, чтобы результат работы метода в контроллере был выведен непосредственно в тело ответа на запрос, а не послужил адресом перехода и не был помещён как параметр в модель, нужно указать непосредственно перед методом
@RequestMapping(value={“/uri”})
@RequestParam - принять параметры в строке
@PathParam - принять праметр в path
GET Метод GET должен использоваться для извлечения данных с сервера. Несколько запросов на получение одного URL-адреса должны быть действительными и данные не должны быть изменены на стороне сервера.
Однако это не означает, что невозможно сделать запрос GET измененным на стороне сервера, но вы должны попытаться убедиться, что вы следуете стандарту.
POST Метод POST следует использовать, когда вам нужно создавать, обновлять или удалять данные на стороне сервера. Выполнение одного и того же запроса POST несколько раз может быть небезопасным и может привести к несовместимым данным. Содержимое запроса POST отправляется в тело запроса. Следовательно, вы не видите параметры в своем браузере, но их легко увидеть, если хотите (даже используя инструменты разработчика браузера), поэтому он не более безопасен, чем запрос GET.
Spring Data
Доступ к данным: реляционные и нереляционные БД, KV хранилища и т.п.
что такое ввобще контекст
законченая смысловая часть…обьект короче просто
Требования к архитектуре REST
Существует шесть обязательных ограничений для построения распределённых REST-приложений по Филдингу:
1 Модель клиент-сервер
2 информация о состоянии клиента на сервере не хранится
3 Ответы сервера, в свою очередь, должны иметь явное или неявное обозначение как кэшируемые или некэшируемые с целью предотвращения получения клиентами устаревших или неверных данных в ответ на последующие запросы.
4 Универсальный интерфейс между компонентами системы.
Для получения универсального интерфейса вводятся следующие ограничения:
- стабильный URI
- манипуляция ресурсом через модель обьекта
- responce&request должны быть самодостаточны, и не требовать еще одного сообщения для полного их понимая
HATEOAS (hypermedia as the engine of application state).
Данный пункт означает, что гипертекст должен быть использован для навигации по API например: GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK 12345 100.00
5 Применение промежуточных серверов способно повысить масштабируемость за счёт балансировки нагрузки
разница URI и URL
URL — это URI, который, помимо идентификации ресурса, предоставляет ещё и информацию о местонахождении этого ресурса. А URN — это URI, который только идентифицирует ресурс в определённом пространстве имён (и, соответственно, в определённом контексте), но не указывает его местонахождение.
ApplicationContext vs BeanFactory
Spring предоставляет два вида контейнера IOC, один XMLBeanFactoryи другой ApplicationContext.
Автоматическая регистрация BeanPostProcessor
Автоматическая регистрация BeanFactoryPostProcessor
Удобный доступ к MessageSource (для i18n)
Публикация ApplicationEvent
destruction method
там можно привязаться и внест
код при уничтожени бина
Внедрение зависимосте
Внедрение зависимостей - вызов
реализации через слой прокладку -
отделяющую логику от реализации
как работает спринг
создал бины (BeanDefinition) из твоих классов ложит их в Map Создал класс и расставил аннотации(он стал бином) в другом классе через @autowired даешь доступ к первому классу создал main class и выбрал тип контейнера IoC-контейнер — это какая-то библиотека Создает управляемые Объекты (beans), которые конфигурируются и управляются с помощью рефлексии запрос у объекта-контейнера экземпляр объекта с определённым именем или определённого типа. контейнер передает экземпляры объектов по их имени другим объектам с помощью конструктора, свойства или фабричного метода.
что нового в спринг 5
поддержка java 9 реактивность (ассинхронность) Поддержка kotlin Новая документация структурирована в модули Конфигурация бинов кодом параллельное выполнение тестов
типичная реализация метода
инерфейс с описанием
реализация метода с
геттерами и сеттерами и\или конструктором
связывание аннотациями @Service в сервисе и имплементации
сторонний код вызывающий
метод через сервис
BeanPostProcessor
Класс BeanPostProcessor имеет два метода.
1) postProcessBeforeInitialization - действий перед инициализацией.
2) postProcessAfterInitialization - после инициализации .
JavaConfig
Фактический компонент JavaConfig - это тот, который проходит через файлы классов и аннотации для создания конфигурации (в отличие от перехода через XML-файл для создания конфигурации).
BeanFactoryPostProcessor
помощи класса ConfigurationClassParser парсирует JavaConfig и создает BeanDefinition.
. BeanDefinition
это специальный интерфейс, через который можно получить доступ к метаданным будущего бина
@Qualifier annotation
is used to resolve the autowiring conflict, when there are multiple beans of same type.
If exist^ @Component(value="car") public class Car implements Vehicle {some} @Component(value="bike") public class Bike implements Vehicle{some}
you need
@Autowired
@Qualifier(“bike”)
private Vehicle vehicle;
Как настроить уровень изоляции транзакции через код
@Transactional(isolation = Isolation.SERIALIZABLE)
Что означает “Контекст” в “ServletContext”?
это контекст для конкретного веб-приложения:
параметры всей программы
слушатели событий приложения
метаданные о приложении