Аннотация @Autowired в Spring Framework
Last updated: 10 мая 2025 г.В прошлом уроке мы внедряли бин админа в бин ПК с помощью конструктора или сеттера помеченных аннотацией @Autowired
. Но аннотация @Autowired намного мощнее.
Если мы просто пометим нужное поле в классе аннотацией @Autowired
, нам даже не нужно будет писать конструктор или сеттер для внедрения этого поля в бин, который создается на основе этого класса. Тем самым можно сократить количество кода в классе.
Класс ServerPC
:
1package com.someclasses;
2
3import org.springframework.stereotype.Component;
4import org.springframework.beans.factory.annotation.Autowired;
5import org.springframework.beans.factory.annotation.Qualifier;
6import org.springframework.context.annotation.Scope;
7import org.springframework.beans.factory.annotation.Value;
8import javax.annotation.PostConstruct;
9import javax.annotation.PreDestroy;
10
11@Component("serverPCBean")
12@Scope("singleton")
13public class ServerPC {
14
15 //Аннотация Autowired может внедрять
16 //зависимости без написаного конструктора или сеттера.
17 //Аннотацию нужно просто написать над полем, которое
18 //должно быть внедрено извне
19 @Autowired
20 private Administrator admin;
21
22 @Value("${pcid}")
23 private String pcid;
24
25 @Value("Acer")
26 private String pcBrand;
27
28 ServerPC () { }
29
30 //Нижние два метода для внедрения user в бин
31 //этого класса теперь можно закомментировать.
32 /*
33 @Autowired
34 public ServerPC (Administrator admin) {
35 this.admin = admin;
36 }
37
38 @Autowired
39 public void setAdmin(Administrator admin) {
40 this.admin = admin;
41 }
42 */
43
44
45 public Administrator getAdmin() {
46 return admin;
47 }
48
49 public void setPcid(String pcid) {
50 this.pcid = pcid;
51 }
52
53 public void setPCBrand(String pcBrand) {
54 this.pcBrand = pcBrand;
55 }
56
57 public String getPcid() {
58 return pcid;
59 }
60
61 public String getPCBrand() {
62 return pcBrand;
63 }
64
65 public void typeOfPC() {
66 System.out.println("Its server PC!");
67 }
68
69 public void getAdminMessage() {
70 admin.adminMessage();
71 }
72
73 //Помечаем метод инициализации
74 //(как в xml init-method)
75 @PostConstruct
76 public String someInitializationsMethod() {
77 return "Some initializations";
78 }
79
80 //Помечаем метод, который выполняется при
81 //уничтожении бина (как в xml destroy-method)
82 @PreDestroy
83 public String someCleaningsMethod() {
84 return "Some clean up";
85 }
86}
Класс сервлета останеться без изменений.
Пример программы:
1import javax.servlet.*;
2import javax.servlet.http.*;
3import javax.servlet.ServletException;
4import javax.servlet.annotation.WebServlet;
5import java.io.*;
6import org.springframework.context.
7 support.ClassPathXmlApplicationContext;
8import com.someclasses.ServerPC;
9
10@WebServlet("/springservlet")
11public class SpringServlet extends HttpServlet{
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException {
15 ClassPathXmlApplicationContext context =
16 new ClassPathXmlApplicationContext(
17 "applicationContext.xml");
18
19 //Достаем бин из context
20 ServerPC serverpcSingleton =
21 context.getBean(
22 "serverPCBean",ServerPC.class);
23
24 //используем бин
25 serverpcSingleton.setPCid("12353425");
26 resp.getWriter().write(serverpcSingleton.getPCid());
27
28 }
29}
Компилируем Java файлики с использованием jar файлов спринг:

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

Как видим, бины были успешно созданы и мы ими успешно воспользовались.
Следующие уроки
Конфигурация Spring бинов с помощью java класса.
14
мин.
Создание веб-приложения в Eclipse IDE
20
мин.
Основы Spring MVC. Как работает DispatcherServlet
19
мин.