Конфигурация Spring бинов с помощью java класса.
Last updated: 10 мая 2025 г.Иногда удобнее бывает конфигурировать бины не с помощью XML, а с помощью Java кода. То есть теперь вместо applicationContext.xml у нас будет Java класс
.
Для начала давайте поправим класс ServerPC. Вернем в него конструктор, так как он будет использован в новом конфигурационном файле.
Класс ServerPC:
1package com.someclasses;
2import org.springframework.stereotype.Component;
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.beans.factory.annotation.Qualifier;
5import org.springframework.beans.factory.annotation.Value;
6import org.springframework.context.annotation.Scope;
7import org.springframework.beans.factory.annotation.PostConstruct;
8import org.springframework.beans.factory.annotation.PreDestroy;
9
10@Component("serverPCBean")
11@Scope("singleton")
12public class ServerPC{
13 @Autowired
14 private Administrator admin;
15 @Value("${pcid}")
16 private String pcid;
17 @Value("Acer")
18 private String pcBrand;
19
20 ServerPC() {}
21
22 //Для начала давайте вернем конструктор, который
23 //внедряет зависимость в бин класса ServerPC.
24 //Он будет использоваться в Java классе конфигураций
25 //для внедрения зависимости админа в бин ServerPC.
26 public ServerPC(Administrator admin) {
27 this.admin = admin;
28 }
29
30 public Administrator getAdmin() {
31 return admin;
32 }
33
34 public void setPCid(String pcid) {
35 this.pcid = pcid;
36 }
37
38 public void setPCBrand(String pcBrand) {
39 this.pcBrand = pcBrand;
40 }
41
42 public String getPCid() {
43 return pcid;
44 }
45
46 public String getPCBrand() {
47 return pcBrand;
48 }
49
50 public void typeOfPC() {
51 System.out.println("Its server PC!");
52 }
53
54 public void getAdminMessage(){
55 admin.adminMessage();
56 }
57
58 @PostConstruct
59 public String someInicializationsMethod() {
60 return "Some inicializations";
61 }
62
63 @PreDestroy
64 public String someCleaningsMethod() {
65 return "Some clean up";
66 }
67}
Конфигурационный Java класс:
1import org.springframework.context.annotation.Configuration;
2import org.springframework.context.annotation.ComponentScan;
3import org.springframework.context.annotation.Bean;
4import org.springframework.context.annotation.PropertySource;
5import com.someclasses.Administrator;
6import com.someclasses.ServerPC;
7
8//Для этого помечаем класс
9//конфигураций аннотацией configuration
10@Configuration
11//@ComponentScan это то же самое что
12//<context:component-scan base-package="com.someclasses"/> в XML
13//для сканирования папки с классами с аннотациями.
14@ComponentScan("com.someclasses")
15//@PropertySource это то же самое что
16//<context:property-placeholder
17//location="classpath:pc.properties"/> в XML.
18//То есть указываем файл из которого можем извлекать
19//значения для внедрения их в поля бинов.
20@PropertySource("classpath:pc.properties")
21public class ConfigClass {
22 //теперь определим бины как в xml только java кодом.
23 //Аннотация @Bean определяет что нижний
24 //метод это определение бина.
25 @Bean
26 //имя метода то есть someUser – это id как в xml.
27 //Возвращаемое значение это класс на основе
28 //которого будет создаваться бин.
29 public Administrator admin(){
30 //Метод создает бин и возвращает его.
31 return new Administrator();
32 //BeanFactory когда будет читать этот файл вызовет
33 //этот метод, этот метод как видим создает и возвращает
34 //новый объект Administrator то есть бин и этот созданный
35 //бин будет хранится в объекте BeanFactory, который
36 //можно будет оттуда извлечь.
37 }
38
39 @Bean
40 public ServerPC serverPC(){
41 //Для внедрения бина Administrator в другой бин
42 //его нужно для начала создать.
43 //Для этого можно вызывать ранее
44 //определенный метод admin(), который возвращает
45 //бин класса Administrator и передать этот бин
46 //в конструктор нового бина класса ServerPC.
47 //Таким образом с помощью метода serverPC()
48 //BeanFactory создает новый бин класса ServerPC
49 //с внедренной зависимостью.
50 return new ServerPC(admin());
51 }
52}
Теперь создадим класс сервлета, в котором бины будут создаваться на основе конфигурационного Java класса.
1import javax.servlet.*;
2import javax.servlet.http.*;
3import javax.servlet.ServletException;
4import javax.servlet.annotation.WebServlet;
5import java.io.*;
6import org.springframework.context.annotation.AnnotationConfigApplicationContext;
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 //Java конфигураций используется уже другая
16 //реализация BeanFactory.
17 //Теперь вместо ClassPathXmlApplicationContext
18 //будет объект AnnotationConfigApplicationContext.
19 AnnotationConfigApplicationContext context =
20 new AnnotationConfigApplicationContext(
21 ConfigClass.class);
22
23 //Достаем бин serverPC, который мы определили
24 //в ConfigClass из context.
25 ServerPC serverpcSingleton =
26 context.getBean(
27 "serverPC",ServerPC.class);
28 //используем бин
29 serverpcSingleton.setPCid("12353425");
30 resp.getWriter().write(serverpcSingleton.getPCid());
31 }
32}
Проверка работы приложения
Компилируем Java файлики включая новый класс с конфигурациями с использованием jar файлов спринг:

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

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