Также ознакомьтесь с нашей последней статьей 69 «Весенние интервью и вопросы — ответы» .
1) Что такое весна?
Ответ:
Spring — это легкая инверсия системы управления и аспектно-ориентированного контейнера.
2) Объясните весну?
Ответ:
- Легкий вес: Spring — легкий вес, когда дело доходит до размера и прозрачности. Базовая версия Spring Framework составляет около 1 МБ. И накладные расходы на обработку также очень незначительны.
- Инверсия управления (IoC): слабое сцепление достигается весной с использованием техники инверсии управления. Объекты дают свои зависимости вместо создания или поиска зависимых объектов.
- Аспектно-ориентированный (AOP): Spring поддерживает Аспектно-ориентированное программирование и обеспечивает целостную разработку, отделяя бизнес-логику приложения от системных служб.
- Контейнер: Spring содержит и управляет жизненным циклом и конфигурацией объектов приложения.
- Framework: Spring предоставляет большую часть внутренней функциональности, оставляя оставшуюся часть кода разработчику.
3) Каковы различные модули в Spring Framework?
Ответ:
- Контейнерный модуль Core
- Модуль контекста приложения
- Модуль АОП (Аспектно-ориентированное программирование)
- JDBC абстракция и модуль DAO
- Модуль интеграции отображения O / R (Объект / Реляционный)
- Веб-модуль
- Модуль MVC Framework
4) Какова структура Spring рамки?
Ответ:
5) Что такое модуль контейнера Core?
Ответ:
Этот модуль обеспечивает фундаментальные функциональные возможности пружинного каркаса. В этом модуле BeanFactory является сердцем любого весеннего приложения. Вся структура была построена на вершине этого модуля. Этот модуль делает контейнер Spring .
6) Что такое модуль контекста приложения?
Ответ:
Модуль контекста приложения делает Spring каркасом. Этот модуль расширяет концепцию BeanFactory , обеспечивая поддержку сообщений интернационализации (I18N), событий жизненного цикла приложения и проверки. Этот модуль также предоставляет множество корпоративных сервисов, таких как доступ JNDI, интеграция EJB , удаленное взаимодействие и планирование. Он также обеспечивает поддержку других структур.
7) Что такое модуль АОП?
Ответ:
Модуль AOP используется для разработки аспектов нашего приложения с поддержкой Spring. Большая часть поддержки была предоставлена Альянсом АОП для обеспечения взаимодействия между Spring и другими структурами АОП . Этот модуль также знакомит с программированием метаданных в Spring . Используя поддержку метаданных Spring, мы сможем добавить аннотации к нашему исходному коду, которые инструктируют Spring, где и как применять аспекты.
8) Что такое абстракция JDBC и модуль DAO?
Ответ:
Используя этот модуль, мы можем поддерживать чистоту и простоту кода базы данных и предотвращать проблемы, возникающие в результате сбоя при закрытии ресурсов базы данных. В этом модуле приобретен новый уровень значимых исключений поверх сообщений об ошибках, выдаваемых несколькими серверами баз данных. Кроме того, этот модуль использует модуль AOP Spring для предоставления услуг управления транзакциями для объектов в приложении Spring.
9) Что такое модуль интеграции объект / реляционное отображение?
Ответ:
Spring также поддерживает использование инструмента объектно-реляционного отображения (ORM) поверх прямого JDBC, предоставляя модуль ORM. Spring предоставляет поддержку для связи с несколькими популярными средами ORM , включая Hibernate , JDO и iBATIS SQL Maps . Управление транзакциями Spring поддерживает каждую из этих сред ORM, а также JDBC .
10) Что такое веб-модуль?
Ответ:
Этот модуль построен на модуле контекста приложения, предоставляя контекст, подходящий для веб-приложений. Этот модуль также содержит поддержку нескольких веб-ориентированных задач, таких как прозрачная обработка многокомпонентных запросов на загрузку файлов и программная привязка параметров запроса к вашим бизнес-объектам. Он также содержит поддержку интеграции с Jakarta Struts .
11) Что такое Spring MVC?
Ответ:
Spring поставляется с полнофункциональной средой MVC для создания веб-приложений. Хотя Spring можно легко интегрировать с другими средами MVC, такими как Struts, среда MVC Spring использует IoC для обеспечения четкого отделения логики контроллера от бизнес-объектов. Это также позволяет вам декларативно привязывать параметры запроса к вашим бизнес-объектам. Он также может использовать любые другие сервисы Spring, такие как обмен сообщениями I18N и проверка.
12) Что такое BeanFactory?
Ответ:
BeanFactory — это реализация фабричного шаблона, который применяет Inversion of Control, чтобы отделить конфигурацию и зависимости приложения от реального кода приложения.
13) Что такое АОП Альянс?
Ответ:
AOP Alliance — это проект с открытым исходным кодом, целью которого является содействие принятию AOP и совместимости между различными реализациями AOP путем определения общего набора интерфейсов и компонентов.
14) Что такое конфигурационный файл Spring?
Ответ:
Файл конфигурации Spring представляет собой файл XML. Этот файл содержит информацию о классах и описывает, как эти классы настроены и представлены друг другу.
15) Что содержится в простом весеннем приложении?
Ответ:
Эти приложения похожи на любое Java-приложение. Они состоят из нескольких классов, каждый из которых выполняет определенную цель в приложении. Но эти классы настроены и представлены друг другу через файл XML. Этот XML-файл описывает, как настроить классы, известные как файл конфигурации Spring.
16) Что такое XMLBeanFactory?
Ответ:
BeanFactory имеет много реализаций в Spring. Но одним из наиболее полезных является org.springframework.beans.factory.xml.XmlBeanFactory , который загружает компоненты на основе определений, содержащихся в файле XML. Чтобы создать XmlBeanFactory , передайте java.io.InputStream в конструктор. InputStream предоставит XML для фабрики. Например, следующий фрагмент кода использует файл java.io. FileInputStream для предоставления XML-файла определения компонента в XmlBeanFactory .
BeanFactory factory = new XmlBeanFactory (new FileInputStream («beans.xml»));
Чтобы получить бин из BeanFactory, вызовите метод getBean (), передав имя бина, который вы хотите получить.
MyBean myBean = (MyBean) фабрика. getBean («myBean»);
17) Какие важные реализации ApplicationContext в среде Spring?
Ответ:
- ClassPathXmlApplicationContext — этот контекст загружает определение контекста из файла XML, расположенного в пути к классу, обрабатывая файлы определения контекста как ресурсы пути к классу.
- FileSystemXmlApplicationContext — этот контекст загружает определение контекста из файла XML в файловой системе.
- XmlWebApplicationContext — этот контекст загружает определения контекста из файла XML, содержащегося в веб-приложении.
18) Объясните жизненный цикл Бина в рамках Spring?
Ответ:
- Контейнер Spring находит определение компонента из XML-файла и создает экземпляр компонента.
- Используя внедрение зависимостей, Spring заполняет все свойства, указанные в определении компонента.
- Если bean-компонент реализует интерфейс BeanNameAware , фабрика вызывает setBeanName (), передавая идентификатор bean-компонента.
- Если bean-компонент реализует интерфейс BeanFactoryAware , фабрика вызывает setBeanFactory () , передавая свой экземпляр.
- Если есть какие-либо BeanPostProcessors, связанные с bean-компонентом, будут вызваны их методы post-ProcessBeforeInitialization () .
- Если для компонента указан метод init, он будет вызван.
- Наконец, если есть какие-либо BeanPostProcessors, связанные с бином, будут вызваны их методы postProcessAfterInitialization () .
19) Что такое бобовая проводка?
Ответ:
Объединение бобов в контейнере Spring известно как бобовое соединение или проводка. При подключении bean-компонентов вы должны указать контейнеру, какие bean-компоненты необходимы и как контейнер должен использовать внедрение зависимостей, чтобы связать их вместе.
20) Как добавить боб в весеннее приложение?
Ответ:
1
2
3
4
5
6
|
<? xml version = "1.0" encoding = "UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> < beans > < bean id = "foo" class = "com.act.Foo" /> < bean id = "bar" class = "com.act.Bar" /> </ beans > |
В теге bean-компонента атрибут id указывает имя компонента, а атрибут class указывает полное имя класса.
21) Что такое синглтон-бины и как вы можете создавать бобы-прототипы?
Ответ:
Бобы, определенные в весенних рамках, являются синглтонами. В теге bean есть атрибут с именем ‘singleton’, если указано true, тогда bean становится singleton, а если установлено в false, bean становится bean-прототипом. По умолчанию установлено значение true. Итак, все bean-компоненты в рамках Spring по умолчанию являются синглтон-компонентами.
1
2
3
|
< beans > < bean id = "bar" class = "com.act.Foo" singleton=”false”/> </ beans > |
22) Каковы важные методы жизненного цикла бобов?
Ответ:
Есть два важных метода жизненного цикла бина. Первый — это настройка, которая вызывается, когда бин загружается в контейнер. Второй метод — это метод разрыва, который вызывается, когда бин выгружается из контейнера.
23) Как вы можете переопределить bean-методы по умолчанию для жизненного цикла?
Ответ:
У тега bean есть еще два важных атрибута, с помощью которых вы можете определить свои собственные методы инициализации и уничтожения. Здесь я показал небольшую демонстрацию. Два новых метода fooSetup и fooTeardown должны быть добавлены в ваш класс Foo.
1
2
3
|
< beans > < bean id = "bar" class = "com.act.Foo" init-method=”fooSetup” destroy=”fooTeardown”/> </ beans > |
24) Что такое внутренняя фасоль?
Ответ:
При связывании bean-компонентов, если элемент bean-компонента напрямую встроен в тег свойства, этот bean-компонент передается внутреннему bean-компоненту. Недостаток этого бина в том, что его нельзя использовать где-либо еще.
25) Какие существуют виды инъекций бобов?
Ответ:
Есть два типа инъекций бобов.
- По сеттеру
- По конструктору
26) Что такое авто проводка?
Ответ:
Вы можете подключить бобы, как вы хотите. Но Spring Framework также делает эту работу для вас. Это может автоматически связать связанные бобы вместе. Все, что вам нужно сделать, это просто установить атрибут autowire тега bean в тип autowire.
1
2
3
|
< beans > < bean id = "bar" class = "com.act.Foo" Autowire=”autowire type”/> </ beans > |
27) Какие существуют типы Autowire?
Ответ:
Существует четыре различных типа автоматического подключения.
- по имени
- ByType
- конструктор
- автоматическое определение
28) Какие типы событий связаны со слушателями?
Ответ:
Есть много событий, связанных с ApplicationContext из Spring Framework. Все события являются подклассами org.springframework.context.Application-Event . Они есть
- ContextClosedEvent — это происходит, когда контекст закрыт.
- ContextRefreshedEvent — это происходит, когда контекст инициализируется или обновляется.
- RequestHandledEvent — это происходит, когда веб-контекст обрабатывает любой запрос.
29) Что такое Аспект?
Ответ:
Одним из аспектов является сквозная функциональность, которую вы реализуете. Это аспект вашего приложения, который вы модулируете. Примером аспекта является регистрация. Ведение журнала — это то, что требуется во всем приложении. Однако, поскольку приложения, как правило, разбиваются на слои в зависимости от функциональности, повторное использование модуля журналирования посредством наследования не имеет смысла. Тем не менее, вы можете создать аспект ведения журнала и применять его во всем приложении, используя AOP.
30) Что такое Jointpoint?
Ответ:
Точка соединения — это точка выполнения приложения, в которой можно подключить аспект. Эта точка может быть вызванным методом, генерируемым исключением или даже изменяемым полем. Это точки, где код вашего аспекта может быть вставлен в обычный поток вашего приложения, чтобы добавить новое поведение.
31) Что такое совет?
Ответ:
Совет — это реализация аспекта. Это что-то вроде сообщения вашему приложению о новом поведении. Как правило, и совет вставляется в приложение в точке соединения.
32) Что такое Pointcut?
Ответ:
Pointcut — это то, что определяет, в каких точках соединения должен применяться совет. Рекомендации могут применяться в любой точке соединения, которая поддерживается платформой AOP. Эти Pointcuts позволяют вам указать, где совет может быть применен.
33) Что такое введение в АОП?
Ответ:
Введение позволяет пользователю добавлять новые методы или атрибуты в существующий класс. Это может затем быть введено в существующий класс без необходимости изменять структуру класса, но дать им новое поведение и состояние.
34) Что такое цель?
Ответ:
Цель — это класс, который рекомендуется. Класс может быть сторонним классом или вашим собственным классом, в который вы хотите добавить свое собственное поведение. Используя концепции АОП, целевой класс может сосредоточиться на своей основной заботе, не зная ни одного применяемого совета.
35) Что такое прокси?
Ответ:
Прокси-объект — это объект, который создается после применения рекомендации к целевому объекту. Когда вы думаете о клиентских объектах, целевой объект и прокси-объект совпадают.
36) Что подразумевается под ткачеством?
Ответ:
Процесс применения аспектов к целевому объекту для создания нового прокси-объекта называется Weaving. Аспекты вплетены в целевой объект в указанных точках соединения.
37) В каких точках можно применять ткачество?
Ответ:
- Время компиляции
- Время загрузки класса
- время выполнения
38) Какие бывают разные советы весной?
Ответ:
- Around: перехватывает вызовы целевого метода
- Before: вызывается перед вызовом целевого метода
- After: вызывается после возврата целевого метода
- Броски: это вызывается, когда целевой метод выбрасывает и исключение
- Вокруг: org.aopalliance.intercept.MethodInterceptor
- До: org.springframework.aop.BeforeAdvice
- После: org.springframework.aop.AfterReturningAdvice
- Броски: org.springframework.aop.ThrowsAdvice
39) Какие бывают типы автопрокси?
Ответ:
- BeanNameAutoProxyCreator
- DefaultAdvisorAutoProxyCreator
- Автопрокси метаданных
40) Что такое класс исключений, связанный со всеми исключениями, которые выдают в весенних приложениях?
Ответ:
DataAccessException — org.springframework.dao.DataAccessException
41) Какие исключения исключают те весенние классы DAO?
Ответ:
Весенний класс DAO не генерирует никаких связанных с технологией исключений, таких как SQLException. Они генерируют исключения, которые являются подклассами DataAccessException.
42) Что такое DataAccessException?
Ответ:
DataAccessException является RuntimeException. Это непроверенное исключение. Пользователь не обязан обрабатывать подобные исключения.
43) Как вы можете настроить bean-компонент для получения источника данных из JNDI?
Ответ:
1
2
3
4
5
|
< bean id = "dataSource" class = "org.springframework.jndi.JndiObjectFactoryBean" > < property name = "jndiName" > < value >java:comp/env/jdbc/myDatasource</ value > </ property > </ bean > |
44) Как вы можете создать пул соединений DataSource?
Ответ:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
< bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource" > < property name = "driver" > < value >${db.driver}</ value > </ property > < property name = "url" > < value >${db.url}</ value > </ property > < property name = "username" > < value >${db.username}</ value > </ property > < property name = "password" > < value >${db.password}</ value > </ property > </ bean > |
45) Как JDBC может использоваться более эффективно в рамках Spring?
Ответ:
JDBC может использоваться более эффективно с помощью шаблонного класса, предоставляемого Spring Framework, называемого JdbcTemplate .
46) Как можно использовать JdbcTemplate?
Ответ:
С использованием Spring JDBC Framework нагрузка на управление ресурсами и обработку ошибок значительно снижается. Таким образом, разработчикам остается писать операторы и запросы для получения данных в базу данных и из нее.
JdbcTemplate template = new JdbcTemplate (myDataSource);
Простой класс DAO выглядит следующим образом.
1
2
3
4
5
6
7
8
|
public class StudentDaoJdbc implements StudentDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this .jdbcTemplate = jdbcTemplate; } more.. } |
Конфигурация показана ниже.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
< bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate" > < property name = "dataSource" > < ref bean = "dataSource" /> </ property > </ bean > < bean id = "studentDao" class = "StudentDaoJdbc" > < property name = "jdbcTemplate" > < ref bean = "jdbcTemplate" /> </ property > </ bean > < bean id = "courseDao" class = "CourseDaoJdbc" > < property name = "jdbcTemplate" > < ref bean = "jdbcTemplate" /> </ property > </ bean > |
47) Как вы пишете данные в бэкэнд весной, используя JdbcTemplate?
Ответ:
JdbcTemplate использует несколько из этих обратных вызовов при записи данных в базу данных. Полезность, которую вы найдете в каждом из этих интерфейсов, будет различной. Есть два простых интерфейса. Одним из них является PreparedStatementCreator, а другим интерфейсом — BatchPreparedStatementSetter .
48) Объясните про PreparedStatementCreator?
Ответ:
PreparedStatementCreator является одним из наиболее распространенных используемых интерфейсов для записи данных в базу данных. Интерфейс имеет один метод createPreparedStatement ().
PreparedStatement createPreparedStatement (Соединение)
выдает SQLException;
Когда этот интерфейс реализован, мы должны создать и вернуть PreparedStatement из аргумента Connection, и обработка исключений будет автоматически удалена. Когда этот интерфейс реализован, также реализуется другой интерфейс SqlProvider , который имеет метод getSql (), который используется для предоставления строк sql в JdbcTemplate.
49) Объясните про BatchPreparedStatementSetter?
Ответ:
Если пользователю нужно обновить более одной строки в кадре, он может перейти на BatchPreparedStatementSetter . Этот интерфейс предоставляет два метода
setValues (PreparedStatement ps, int i) выдает SQLException;
int getBatchSize ();
GetBatchSize () сообщает классу JdbcTemplate, сколько операторов нужно создать. И это также определяет, сколько раз будет вызываться setValues ().
50) Объясните про RowCallbackHandler и почему он используется?
Ответ:
Для навигации по записям мы обычно используем ResultSet. Но Spring предоставляет интерфейс, который обрабатывает всю эту нагрузку и оставляет пользователю решать, что делать с каждой строкой. Spring предоставляет интерфейс RowCallbackHandler . Существует метод processRow (), который необходимо реализовать так, чтобы он был применим для всех и каждого.
void processRow (java.sql.ResultSet rs);