Топ-100Конфигурация Spring бинов с помощью аннотаций - CodOrbits
LogoCodOrbits

Раздел: Spring Framework

Изучите Spring Framework — один из самых популярных фреймворков Java для создания гибких и масштабируемых приложений.

Все разделы
Иконка Spring Framework

Конфигурация Spring бинов с помощью аннотаций

Last updated: 10 мая 2025 г.

Как уже было упомянуто в конце прошлого урока, бины можно создавать не в applicationContext.xml, а аннотациями прямо в классах бинов.

Благодаря этому можно не писать огромное количество xml кода.

Можно создать вот такие бины, вот таким образом с помощью xml:

1<bean id="someAdminBean"
2      class="com.someclasses.Administrator">
3</bean>
4
5<bean id="serverPCBean"
6      class="com.someclasses.ServerPC" scope="singleton"
7      init-method="someInicializationsMethod"
8      destroy-method="someCleaningsMethod">
9    <constructor-arg ref="someAdminBean"/>
10</bean>

Идентичный бин класса ServerPC можно сконфигурировать с помощью аннотаций сразу в классе бина:

1package com.someclasses;
2import org.springframework.stereotype.Component;
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.beans.factory.annotation.Value;
5import org.springframework.context.annotation.Scope;
6import org.springframework.beans.factory.annotation.Qualifier;
7import javax.annotation.PostConstruct;
8import javax.annotation.PreDestroy;
9
10//С помощью Component помечаем что
11//на основе этого класса будет создан бин.
12//В скобочках указываем id бина.
13@Component("serverPCBean")
14//эго Scope только аннотацей
15@Scope("singleton")
16public class ServerPC{
17    private Administrator admin;
18    //С помощью Value записывается
19    //значение в поле бина.
20    //Здесь из файла pc.propreites в String поле
21    @Value("${pcid}")
22    private String pcid;
23    @Value("Acer")
24    private String pcBrand;
25
26    ServerPC() {}
27
28    //С помощью Autowired происходит DI.
29    //Spring ищет в папке someclasses
30    //класс Administrator (класс Administrator
31    //и ServerPC лежат в папке classes/com/someclasses,
32    //можно увидеть сверху package com.someclasses;)
33    //который тоже помечен аннотацией Component
34    //и потом создает бин класса Administrator
35    //и внедряет его в текущий бин serverPCBean.
36    @Autowired
37    public ServerPC(Administrator admin) {
38        this.admin = admin;
39    }
40
41    //Это внедрение с помощью сеттера.
42    //Кстати @Autowired можно
43    //применить не только на сеттер,
44    //а вообще на метод с любым именем
45    //в этом классе который внедряет зависимость.
46    @Autowired
47    public void setAdmin(Administrator admin) {
48        this.admin = admin;
49    }
50
51    public Administrator getAdmin() {
52        return admin;
53    }
54
55    public void setPcid(String pcid) {
56        this.pcid = pcid;
57    }
58
59    public void setPCBrand(String pcBrand) {
60        this.pcBrand = pcBrand;
61    }
62
63    public String getPCid() {
64        return pcid;
65    }
66
67    public String getPCBrand() {
68        return pcBrand;
69    }
70
71    public void typeOfPC() {
72        System.out.println("Its server PC!");
73    }
74
75    public void getAdminMessage() {
76        admin.adminMessage();
77    }
78
79    //Помечаем метод инициализации
80    //(как в xml init-method)
81    @PostConstruct
82    public String someInitializationsMethod() {
83        return "Some initializations";
84    }
85
86    //Помечаем метод который выполняется при
87    //уничтожении бина (как в xml destroy-method)
88    @PreDestroy
89    public String someCleaningMethod() {
90        return "Some clean up";
91    }
92}

Также в классе администратор тоже пишем аннотацию Component, чтобы создался бин на основе этого класса и внедрился в бин ПК:

1package com.someclasses;
2
3import org.springframework.stereotype.Component;
4
5@Component()
6public class Administrator{
7    public String adminMessage(){
8        return "I’m an administrator!";
9    }
10}

В файле же applicationContext.xml нам нужно указать где находятся файлики классов, которые мы только что создали, чтобы BeanFactory нашел их и создал на основе этих файлов с аннотациями бины.

applicationContext.xml:

1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4       xmlns:context="http://www.springframework.org/schema/context"
5       xsi:schemaLocation="http://www.springframework.org/schema/beans
6                           http://www.springframework.org/schema/beans/spring-beans.xsd
7                           http://www.springframework.org/schema/context
8                           http://www.springframework.org/schema/context/spring-context.xsd">
9
10<!-- здесь определяем папку, которую BeanFactory 
11будет анализировать на наличие аннотаций. -->
12    <context:component-scan base-package="com.someclasses"/>
13    <context:property-placeholder location="classpath:pc.properties"/>
14</beans>

Давайте же проверим создадутся ли бины в сервлете.

Пример программы:

1import javax.servlet.*;
2import javax.servlet.http.*;
3import javax.servlet.ServletException;
4import javax.servlet.annotation.WebServlet;
5import java.io.*;
6import org.springframework.context.support.ClassPathXmlApplicationContext;
7import com.someclasses.ServerPC;
8
9@WebServlet("/springservlet")
10public class SpringServlet extends HttpServlet{
11    protected void doGet(HttpServletRequest req,
12                         HttpServletResponse resp)
13            throws ServletException, IOException {
14        //Объект Beanfactory
15        //анализирует applicationContext.xml,
16        //видит что там указано что нужно искать
17        //классы с аннотациями в папке com/someclasses,
18        //объект Beanfactory анализирует эту папку
19        //и создает на основе этих классов бины.
20        ClassPathXmlApplicationContext context =
21                new ClassPathXmlApplicationContext(
22                        "applicationContext.xml");
23
24        //Достаем бин из context
25        ServerPC serverpcSingleton =
26                context.getBean(
27                        "serverPCBean",ServerPC.class);
28        //используем бин
29        serverpcSingleton.setPcId("12353425");
30        resp.getWriter().write(serverpcSingleton.getPcId());
31    }
32}

Проверка работы приложения

Компилируем Java файлики с использованием jar файлов спринг:

Запускаем Tomcat и открываем страницу сервлета по пути /springservlet:

Как видим, быны были успешно созданы и мы ими успешно воспользовались.

Search Icon

При всех плюсах такого подхода конфигурации бинов, ясное дело, у такого подхода есть маленький минус, что много бинов на основе одного и того же класса аннотациями не определишь, поэтому если нам нужно создать еще один бин с другим id на основе класса ServerPC, то нужно определять его в applicationContext.


Следующие уроки

Аннотация @Autowired в Spring Framework

12
мин.

Similar Articles Icon
Divider

Конфигурация Spring бинов с помощью java класса.

14
мин.

Similar Articles Icon
Divider

Создание веб-приложения в Eclipse IDE

20
мин.

Similar Articles Icon