dir.by  
Программирование, разработка, тестирование
Java
Spring в Java (Spring Framework, Spring Data, Spring Boot, ...)
Что такое Dependency Injection в Spring? Создание простого Spring проекта с Dependency Injection в конструкторе с атрибутами @Component, @Autowired | Редактор IntelliJ Idea и язык Java
  Посмотрели 1839 раз(а)       Комментариев 2  
 Последний комментарий: (10 октября 2025 9:36) Добрый день! Спасибо читать...       написать комментарий...
 Что такое Dependency Injection в Spring? Создание простого Spring проекта с Dependency Injection в конструкторе с атрибутами @Component, @Autowired | Редактор IntelliJ Idea и язык Java 
последнее обновление: 7 апреля 2025
DI (Dependency Injection) используется когда классы зависят друг от друга.
Например: классу в конструкторе нужен другой класс.
  Java  
public class Book
{
     ...

     public Book(Author author)
     {
          _author = author;
     }
}


Библиотека Spring сама автоматически создает вложенные объекты.
Spring создаст Author объект, но для этого нужно указать тип внедрения зависимости .

Тип внедрения зависимости - это место, где один класс будет внедряться в другой:
1) В конструкторе
Я буду использовать в моем примере ниже
2) В сеттере
3) В поле класса
Мой пример:
Есть класс Book
Есть класс Author
При создании Book нужен Author

Зачем зачем мне использовать Spring, Dependency Injection если можно 2-мя строчками создать мои объекты:
  Java  
Author author = new Author();
Book book = new Book(author);


Ответ: Потому что хороший стиль указать через атрибут зависимости, а Spring сам создаст вложенные объекты.
А самый большой плюс, то что при создании вложенных объектов они становятся слабосвязанными (Spring создает автоматически) и от этого меньше кода и легче писать тесты.
Что такое Spring Bean и как указать зависимости в разных bean?
Spring Bean это обычный объект, который создаётся не мной, а объект создает Spring Container.
  Java  
ApplicationContext context = new ClassPathXmlApplicationContext("MyConfig.xml"); // создаем Spring Container из конфигурационного файла
Book book = (Book) context.getBean("myBookBean");
Spring по названию myBookBean создает Book.
А так как внутри нужен Author то используя внедрение зависимостей создает Author
Зависимые объекты Spring Container создает сам

Spring Container знает как создать Book потому что использую атрибут @Component:
В начале класса буду использовать @Component("придумываем любое название для bean").
Для внедрения зависимости буду использовать аннотацию @Autowired в конструктор
  Java  
@Component("myBookBean")
public class Book // Класс Book это bean с названием myBookBean
{
     ...

     @Autowired
     public Book(Author author)
     {
          _author = author;
     }
}
 
В начале класса буду использовать @Component("придумываем любое название для bean").
  Java  
@Component("myAuthorBean")
public class Author // Класс Author это bean с названием myAuthorBean
{
     ...

     public Author()
     {
          _authorName = "Mark Twain";
     }
}
 
В конфигурационном файле для context:component написал base-package (где размещаются наши классы):
  Xml  
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"...>

     <context:component-scan base-package="com.example.springproj1" />

</beans>
 
Какая конфигурация лучше для IoC Spring Container (по этой конфигурации Spring будет знать как создавать bean):
конфигурация в XML файле ... (используется в старых программах)
• конфигурация через атрибуты @Component, @Autowired (используется в современных программах и я использую в моем примере ниже)
• конфигурация через Java код используя @Configuration, @ComponentScan, @Bean (иногда используют)
 
Конфигурация для IoC Spring Container это объяснение для IoC Spring Container как создавать bean объекты.
Тот, кто контролирует все ваши классы и может управлять ими называется ApplicationContext (IoC Spring Container)
Создаю простой Spring проект с Dependency Injection в конструкторе | Редактор IntelliJ Idea и язык Java
Скачать пример:
SpringProj_DI.zip ...
размер: 20 kb
На заметку! У вас должна быть установлена Java JDK. Если у вас ее нет то нужно скачать и установить Java JDK ...

На заметку! У вас должна быть установлена IntelliJ IDEA Ultimate. Если у вас ее нет то нужно скачать и установить IntelliJ IDEA ...
Шаг 1. Cоздаем новый проект с типом Spring Boot
 
Выбираем Spring Boots:
 
Так как у нас простой проект, то галочки не ставим:
 
Проект создался:
Шаг 2. Создаем новый Book.java файл
Нажимаем правой клавишей мыши на папку моего пакета и создаем новый java файл
 
Напишем название Book
И выберем тип Class
Нажмем кнопку ввод
Файл создался.
 
Внутри файла Book.java добавим код:
package com.example.springproj1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("myBookBean")
public class Book {

     protected String _name;
     protected Author _author;

     @Autowired
     public Book(Author author)
     {
          _name = "Tom Sawyer";
          _author = author;
     }

     public void ShowBook()
     {
          System.out.println(_name);
          _author.ShowAuthor();
     }
}
Шаг 3. Создаем новый Author.java файл
package com.example.springproj1;

import org.springframework.stereotype.Component;

@Component("myAuthorBean")
public class Author {
     protected String _authorName;

     public Author()
     {
          _authorName = "Mark Twain";
     }

     public void ShowAuthor()
     {
          System.out.println(_authorName);
     }
}
Шаг 4. Создаем новый конфигурационный MyConfig.xml файл
Нажимаем правой клавишей мыши на папку resources и создаем новый Spring Config файл
 
Напишем название MyConfig
Нажмем кнопку ввод
Файл создался.
 
Внутри файла MyConfig.xml добавим код:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

     <context:component-scan base-package="com.example.springproj1" />

</beans>
Шаг 5. В application java файле добавим код
package com.example.springproj1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//@SpringBootApplication
public class SpringProj1Application {

     public static void main(String[] args) {
          SpringApplication.run(SpringProj1Application.class, args);

          ApplicationContext context = new ClassPathXmlApplicationContext("MyConfig.xml");
          Book book = (Book) context.getBean("myBookBean");
          book.ShowBook();

     }

}
 
На заметку!
// Вариант 1
Book book = (Book) context.getBean("myBookBean");

// а можно так

// Вариант 2
Book book = context.getBean("myBookBean", class.Book);
На заметку!
Чтобы Spring создавал bean мне пришлось закоментировать //@SpringBootApplication в файле SpringProj1Application.java
Шаг 6. Запускаем проект
Чтобы запустить проект надо чтобы был открыт application java файл и нажимаем на зеленый треугольник:
 
После запуска программы на экране увидим результат:
Tom Sawyer
Mark Twain
 
← Предыдущая тема
Что такое Spring Bean? Что такое Spring Container? IoC (inversion of control) | Создание простого Spring проекта и конфигурациия Spring Container в XML файле | Редактор IntelliJ Idea и язык Java
 
Следующая тема →
Создаем новое Spring Web приложение (запрос идет в Controller → Controller создает ответ как текст или json) | Java, Spring Web, Spring Boot, Maven
 
Ваши Отзывы ... 1 комментариев
гость
10 октября 2025 8:47
Доброго времени суток! Уважаемый Автор данного ресурса, выражаю вам благодарность за подробнейшие разъяснения и скрины! Возможно вы этого не прочтете, но знайте что вы принесли большой вклад в понимании этой темы, для начинающего разработчика.
admin (10 октября 2025 9:36) Добрый день! Спасибо ответить
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Экскурсии по Москве Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
  Объявления  
  Объявления  
 
Скачать и установить
Установка JDK (скачиваем и устанавливаем библиотеку Java для Windows)
Скачать и установить IntelliJ IDEA для изучения Java, Spring, Jakarta EE | Функциональность и отличия: Community | Ultimate
Изучаем язык Java (class, interface, свойства и т.д.)
Создание простого консольного приложения в IntelliJ IDEA для изучения Java
Что такое interface в Java ?
Прямо в коде (во время выполнения) делаем имплементацию для interface | Java
Потоки в Java
lambda это безымянный метод (нет имени и не принадлежит классу) | Java
Исключения и обработка в Java. Пример: try {...} catch (Exception e) {...}
Зачем использовать throws Exception в названии функциии в Java ? Ответ: метод создает исключение и нет обработки try catch. Пример: float CalculateDensity(float mass, float volume) throws Exception { ... throw new Exception("Error! Volume is zero."); ... }
Java web приложение (сервлет, jsp страница, основная функциональность и без фрэймворков)
Создаем новое простое web приложение (jsp web страница) | Java, Maven
Создаем web сервлет (сервлет находится на веб-сервере, по запросу возвращает результат) | Java
Установка Tomcat web server (скачиваем и устанавливаем для Windows)
Проверяем, тестируем Tomcat web server (создаем новый my.hml файл)
Что такое Maven
Что такое динамическая web страница jsp (Java Server Page) ?
Как инсталировать Smart Tomcat plugin в Intellij Idea
Ошибка "The SDK is not specified for module ... | Project SDK is not defined ..." в IntelliJ IDEA | Java
Spring в Java (Spring Framework, Spring Data, Spring Boot, ...)
Что такое Spring? Зачем в Java использовать Spring?
Что такое Spring Bean? Что такое Spring Container? IoC (inversion of control) | Создание простого Spring проекта и конфигурациия Spring Container в XML файле | Редактор IntelliJ Idea и язык Java
Что такое Dependency Injection в Spring? Создание простого Spring проекта с Dependency Injection в конструкторе с атрибутами @Component, @Autowired | Редактор IntelliJ Idea и язык Java
Создаем новое Spring Web приложение (запрос идет в Controller → Controller создает ответ как текст или json) | Java, Spring Web, Spring Boot, Maven
Создаем новое Spring WebSocket приложение (Java WebSocket шлет сообщение к JavaScript WebSocket) | Java, Spring WebSocket, Spring Boot, Maven
Создаем Azure Web App с типом Java (бесплатно). То есть создаем пустой web server
Java Spring web приложение кладем в Azure
К приложению Azure Web App (Java) соединяемся через FTP | используем File Explorer
Ошибка "The SDK is not specified for module ... | Project SDK is not defined ..." в IntelliJ IDEA | Java, Spring Boot
Как инсталировать Spring WebSocket plugin в Intellij Idea
Jakarta EE / Java EE в Java (web приложения, web сервисы)
Что такое Jakarta EE (Java EE) ? | В каком редакторе (программе) удобно писать Jakarta EE (Java EE) код?
Создание простого web-проекта в IntelliJ Idea Ultimate | Jakarta EE (Java EE)
Struts на Java (расширяет API Java Servlet используя MVC)
Что такое Struts | Java
Собеседования на Java

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика