0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: spring context, spring framework, программирование на java, аннотации и метаданные в spring</p>
1
<p>Теги: spring context, spring framework, программирование на java, аннотации и метаданные в spring</p>
2
<p>Контекст (а у него есть даже интерфейс - org.springframework.context.ApplicationContext) - это некоторое окружение, в котором работает приложение на<strong>Spring Framework</strong>.</p>
2
<p>Контекст (а у него есть даже интерфейс - org.springframework.context.ApplicationContext) - это некоторое окружение, в котором работает приложение на<strong>Spring Framework</strong>.</p>
3
<p>Страшные аббревиатуры<strong>DI, IoC</strong>- это всё про него. Собственно, контекст создаёт и хранит экземпляры классов вашего приложения, определяет их зависимости друг с другом и автоматически их задаёт.</p>
3
<p>Страшные аббревиатуры<strong>DI, IoC</strong>- это всё про него. Собственно, контекст создаёт и хранит экземпляры классов вашего приложения, определяет их зависимости друг с другом и автоматически их задаёт.</p>
4
<p>Безусловно, для того чтобы<strong>Spring</strong>создал контекст с экземплярами классов, ему нужно предоставить дополнительную информацию - мета-данные, из каких классов/объектов состоит ваше приложение, как они создаются, какие у них есть зависимости и т. д.</p>
4
<p>Безусловно, для того чтобы<strong>Spring</strong>создал контекст с экземплярами классов, ему нужно предоставить дополнительную информацию - мета-данные, из каких классов/объектов состоит ваше приложение, как они создаются, какие у них есть зависимости и т. д.</p>
5
<p>Итого:<strong>Spring Context + мета-данные = работающее приложение</strong>.</p>
5
<p>Итого:<strong>Spring Context + мета-данные = работающее приложение</strong>.</p>
6
<h2>Где найти контекст?</h2>
6
<h2>Где найти контекст?</h2>
7
<p>Контекст является ключевой функциональностью Spring и лежит в<strong>maven-зависимости</strong>spring-context (на момент написания - org.springframework:spring-context:5.1.4.RELEASE). Обычно эта зависимость является транзитивной для остальных проектов<strong>Spring</strong>. И если вы, например, подключаете<strong>spring-boot-starter</strong>, то она подключится автоматически, и не нужно думать про то, где её взять.</p>
7
<p>Контекст является ключевой функциональностью Spring и лежит в<strong>maven-зависимости</strong>spring-context (на момент написания - org.springframework:spring-context:5.1.4.RELEASE). Обычно эта зависимость является транзитивной для остальных проектов<strong>Spring</strong>. И если вы, например, подключаете<strong>spring-boot-starter</strong>, то она подключится автоматически, и не нужно думать про то, где её взять.</p>
8
<p>Но если вы хотите попробовать<em>"голый"</em>Spring, т. е. только ту часть, которая называется<strong>IoC-контейнер</strong>, то достаточно подключить лишь<strong>spring-context</strong>.</p>
8
<p>Но если вы хотите попробовать<em>"голый"</em>Spring, т. е. только ту часть, которая называется<strong>IoC-контейнер</strong>, то достаточно подключить лишь<strong>spring-context</strong>.</p>
9
<p>Итого:<strong>подключите</strong>org.springframework:spring-context:5.1.4.RELEASE.</p>
9
<p>Итого:<strong>подключите</strong>org.springframework:spring-context:5.1.4.RELEASE.</p>
10
<h2>Какие бывают контексты и как их создать?</h2>
10
<h2>Какие бывают контексты и как их создать?</h2>
11
<p>У интерфейса ApplicationContext есть большое количество реализаций: - ClassPathXmlApplicationContext; - FileSystemXmlApplicationContext; - GenericGroovyApplicationContext; - AnnotationConfigApplicationContext; - и даже StaticApplicationContext; - а также некоторые другие.</p>
11
<p>У интерфейса ApplicationContext есть большое количество реализаций: - ClassPathXmlApplicationContext; - FileSystemXmlApplicationContext; - GenericGroovyApplicationContext; - AnnotationConfigApplicationContext; - и даже StaticApplicationContext; - а также некоторые другие.</p>
12
<p>Они отличаются друг от друга именно тем, каким способом задаются мета-данные и где хранится эта конфигурация. Например: - ClassPathXmlApplicationContext - метаданные конфигурируются XML-файлом(-ами) и они лежат в classpath, т. е. в ресурсах модуля; - FileSystemXmlApplicationContext - метаданные тоже конфигурируются XML-файлом(-ами), но они находятся где-то в файловой системе, например, /etc/yourapp/spring-context.xml; - AnnotationConfigApplicationContext - метаданные конфигурируются с помощью аннотаций прямо на классах.</p>
12
<p>Они отличаются друг от друга именно тем, каким способом задаются мета-данные и где хранится эта конфигурация. Например: - ClassPathXmlApplicationContext - метаданные конфигурируются XML-файлом(-ами) и они лежат в classpath, т. е. в ресурсах модуля; - FileSystemXmlApplicationContext - метаданные тоже конфигурируются XML-файлом(-ами), но они находятся где-то в файловой системе, например, /etc/yourapp/spring-context.xml; - AnnotationConfigApplicationContext - метаданные конфигурируются с помощью аннотаций прямо на классах.</p>
13
<p>Современным способом конфигурирования считаются аннотации (AnnotationConfigApplicationContext), дальше будем создавать именно их.</p>
13
<p>Современным способом конфигурирования считаются аннотации (AnnotationConfigApplicationContext), дальше будем создавать именно их.</p>
14
<p>Приведём пример создания такого контекста в методе<strong>main</strong>:</p>
14
<p>Приведём пример создания такого контекста в методе<strong>main</strong>:</p>
15
@Configuration @ComponentScan public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class); } }<p>Внутри конструктора как раз и происходит инициализация контекста из мета-данных. Как и полагается, в AnnotationConfigApplicationContext мета-данные конфигурируются аннотациями. Несложно заметить аннотацию @Configuration на Main-классе, и что он передаётся в конструктор контекста. Собственно, Main и есть описание метаданных.</p>
15
@Configuration @ComponentScan public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Main.class); } }<p>Внутри конструктора как раз и происходит инициализация контекста из мета-данных. Как и полагается, в AnnotationConfigApplicationContext мета-данные конфигурируются аннотациями. Несложно заметить аннотацию @Configuration на Main-классе, и что он передаётся в конструктор контекста. Собственно, Main и есть описание метаданных.</p>
16
<p><strong>Итого: создаём контекст</strong>.</p>
16
<p><strong>Итого: создаём контекст</strong>.</p>
17
<p>В результате мы получили работающее приложение на<strong>Spring</strong>. Правда, пока ещё без бизнес-логики. А что же означает аннотация @ComponentScan, и как правильно определять и писать бины, мы узнаем в следующей части.</p>
17
<p>В результате мы получили работающее приложение на<strong>Spring</strong>. Правда, пока ещё без бизнес-логики. А что же означает аннотация @ComponentScan, и как правильно определять и писать бины, мы узнаем в следующей части.</p>
18
<p>Следите за новостями, оставляйте комментарии и посмотрите программу курса<a>"Разработчик на Spring Framework"</a>, вдруг захочется погрузится полностью!</p>
18
<p>Следите за новостями, оставляйте комментарии и посмотрите программу курса<a>"Разработчик на Spring Framework"</a>, вдруг захочется погрузится полностью!</p>
19
19