Внедрение зависимостей с помощью сеттера.
Last updated: 10 мая 2025 г.Помним, что в прошлом уроке внедрение админа в ПК происходило с помощью конструктора в классе ПК.
Но внедрять также можно с помощью сеттера
Класс ServerPC:
1package com.someclasses;
2
3public class ServerPC{
4 private Administrator admin;
5 private String pcid;
6 private String pcBrand;
7
8 ServerPC() {}
9
10 ServerPC(Administrator admin) {
11 this.admin = admin;
12 }
13
14 //Теперь внедрение будет происходить
15 //с помощью этого сеттера.
16 public void setAdmin(Administrator admin){
17 this.admin = admin;
18 }
19
20 public Administrator getAdmin() {
21 return admin;
22 }
23
24 public void setPcid(String pcid) {
25 this.pcid = pcid;
26 }
27
28 public void setPCBrand(String pcBrand) {
29 this.pcBrand = pcBrand;
30 }
31
32 public String getPCid() {
33 return pcid;
34 }
35
36 public String getPCBrand() {
37 return pcBrand;
38 }
39
40 public String getAdminMessage(){
41 return admin.adminMessage();
42 }
43}
Теперь давайте в конфигурациях определим новый бин Серверного ПК, в который внедрять бин админа будем уже с помощью сеттера класса серверного ПК.
applicationContext.xml:
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4xmlns:context="http://www.springframework.org/schema/context"
5xsi:schemaLocation="http://www.springframework.org/schema/beans
6http://www.springframework.org/schema/beans/spring-beans.xsd
7http://www.springframework.org/schema/context
8http://www.springframework.org/schema/context/spring-context-3.0.xsd">
9
10<bean id="someAdminBean" class="com.someclasses.Administrator">
11</bean>
12
13<bean id="serverPCBean" class="com.someclasses.ServerPC">
14<constructor-arg ref="someAdminBean"/>
15</bean>
16
17<bean id="serverPCBeanSetter" class="com.someclasses.ServerPC">
18<!-- внедряем зависимость someAdminBean
19через сеттер с помощью тега property.
20Помним что в классе ServerPC мы определили
21вот такой сеттер setAdmin(Administrator admin).
22Здесь в теге property в name указывается название
23этого сеттера только без set в начале
24и с маленькой буквы это важно.
25Для внедрения Спринг будет искать в классе ServerPC
26метод, который начинается с set и заканчивается на Admin.-->
27<property name="admin" ref="someAdminBean"/>
28</bean>
29
30<!-- Можно через сеттер внедрить значение
31(оно указывается в атрибуте value) в любое другое
32поле класса ServerPC.
33Помним что в классе ServerPC мы определили еще два
34строковых поля и написали сеттеры для них.
35Внедрение происходит таким же образом
36как и для admin как описано выше.-->
37<property name="pcBrand" value="Acer"/>
38<property name="pcId" value="pc123424"/>
39</bean>
40
41</beans>
Создание и получение бинов в Java программе.
Давайте же теперь в классе сервлета извлечем сконфигурированный бин и проверим внедрился ли в него бин админа с помощью сеттера.
Пример программы:
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 ClassPathXmlApplicationContext context =
15 new ClassPathXmlApplicationContext(
16 "applicationContext.xml");
17 //Теперь извлечем новый бин serverPCBeanSetter
18 ServerPC serverpc =
19 context.getBean("serverPCBeanSetter",ServerPC.class);
20 resp.getWriter().write(serverpc.getAdminMessage());
21 }
22}
Проверка работы приложения
Теперь проверим скажет ли администратор “I’m an administrator!”.
Компилируем Java файлики. Файл сервлета при этом компилируем с использованием jar файлов спринг:

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

Как видим сказал. То есть объект админа был успешно внедрен в объект ПК с помощью сеттера.
Следующие уроки
Внедрение значений из внешнего файла в поля бина.
18
мин.
Области видимости бинов (Spring Scopes)
16
мин.
Жизненный цикл Spring-бина
18
мин.