1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/nsgxa-mini-spring

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 15:34 333feb0

mini-spring

Серия по созданию Spring-фреймворка Ручное создание Spring-фреймворка Содержимое будет обновляться, подробные руководства доступны на моем блоге https://blog.csdn.net/qq_31749835/article/details/90812799

Недавно изучил некоторые аспекты Spring, поэтому решил записать и реализовать основные функции Spring-фреймворка. Читая эти материалы, я надеюсь преодолеть страх перед Spring-фреймворком, ведь тщательное изучение помогает легко понять его работу. mini-spring стремится реализовать основные функции Spring, поэтому прошу опытных разработчиков посетить мой блог и помочь увеличить количество посещений!

  1. Создание небольшого Spring-фреймворка с нуля — реализация запуска SpringBoot
  2. Создание небольшого Spring-фреймворка с нуля — интеграция с сервером Tomcat
  3. Создание небольшого Spring-фреймворка с нуля — реализация контроллера для обработки MVC-запросов
  4. Создание небольшого Spring-фреймворка с нуля — реализация управления Bean (IOC и DI)## Целевая аудитория Mini-Spring предназначен для тех, кто уже знаком с Spring-фреймворком или имеет опыт его использования и хочет углубить понимание его работы через изучение исходного кода. Однако, поскольку исходный код Spring-фреймворка довольно сложен и в основном используется для оптимизации многопоточной работы, в этом репозитории упрощены основные логические части, чтобы сделать его более доступным для понимания. Также я надеюсь, что этот проект поможет мне и другим разработчикам лучше понять исходный код.## Основная среда разработки
  • Язык: Java8
  • IDE: IDEA или Eclipse с установленным плагином Lombok
  • Управление зависимостями и сборка проекта: Gradle

Функциональная структура

Mimi_Spring
├─framework
│  ├─beans 
│  │  ├─Autowired  маркер аннотации для внедрения зависимостей
│  │  ├─Bean  маркер аннотации для bean-объекта
│  │  └─BeanFactory  фабрика bean
│  ├─context
│  ├─core
│  │  └─ClassScanner  сканирование пакетов
│  ├─starter
│  │  └─MiniApplication  класс запуска фреймворка
│  ├─web  логика управления страницами
│  │  ├─handler
│  │  │  ├─HandlerManager
│  │  │  └─MappingHandler 
│  │  ├─mvc
│  │  │  ├─Controller  аннотация контроллера
│  │  │  ├─RequestMapping  аннотация для маршрутизации запросов
│  │  │  └─RequestParam  аннотация для параметров запроса
│  │  ├─server
│  │  │  └─TomcatServer  интегрированный веб-контейнер
│  │  ├─servlet
│  │  │  └─DispatcherServlet  обработчик запросов
├─test
│  ├─controller
│  │  └─UserController  тестовый контроллер для пользователя 
└─Application  класс запуска проекта
   └─ Дополнительные функции ещё предстоит реализовать.

Описание

Проект разделен на два модуля: framework и test. Модуль framework отвечает за реализацию основных функций Spring и использует имена пакетов для разделения функций. Модуль test предназначен для проверки корректности кода модуля framework.

Запуск SpringBootВ блоге Создание мини-версии Spring-фреймворка с нуля — реализация запуска SpringBoot подробно описан процесс запуска проекта SpringBoot. Приложение запускается через вызов метода run класса MiniApplication, и при успешном запуске выводит соответствующий результат. Модуль framework предоставляет поддержку для модуля test, а модуль test, в свою очередь, обеспечивает проверку модуля framework.### Интеграция с сервером Tomcat

В блоге Создание мини-версии Spring-фреймворка с нуля — интеграция с сервером Tomcat на основе предыдущего шага по реализации запуска SpringBoot описана интеграция Tomcat-контейнера в наш мини-фреймворк Spring.

Сначала описаны основные принципы обработки запросов контейнером, анализируются процессы обработки и ответа на запросы Tomcat-контейнера. Затем описана конкретная реализация интеграции Tomcat, добавлены классы TomcatServer и TestServlet для инициализации контейнера и тестирования запросов Servlet. Когда TestServlet корректно обрабатывает запрос /test.json и возвращает строку "test", это указывает на корректную работу Servlet.

Реализация обработки MVC-запросов и ответов

В статье Создание мини-версии Spring-фреймворка с нуля — реализация обработки MVC-запросов и ответов описана реализация основных функций Spring MVC. Используя сканирование пакетов и рефлексию, получают информацию о аннотациях и создают экземпляры, что позволяет реализовать обработку запросов и ответов.В модуле test приложение Application передаёт информацию о классах в модуль framework через MiniApplication. MiniApplication вызывает ClassScanner для сканирования пакетов, используя загрузчик классов для получения пути к классам (с дополнительной обработкой информации о jar-файлах), и возвращает список классов в MiniApplication. Затем HandlerManager получает информацию о классах и собирает их.TomcatServer изменяет путь URI для перехвата всех запросов через Tomcat на "/", перенаправляя их в DispatcherServlet. Метод service класса DispatcherServlet выполняет сопоставление URI, и при успешном сопоставлении вызывает метод resolveMappingHandler класса Handler для создания и возврата ответа.

Управление бинами (IOC и DI)

Блог Создание небольшого фреймворка Spring с нуля — реализация управления бинами (IOC и DI) использует рефлексию для реализации внедрения зависимостей. Введены аннотации @Bean для маркировки классов, которые требуют управления, а также аннотация @Autowired для указания мест, где нужно внедрить экземпляры бинов. Внедрены также ключевые реализации класса BeanFactory, который предоставляет методы getBean для получения бинов и initBean для инициализации фабрики. В то же время изменен MappingHandler для получения бинов из фабрики.

Тестирование включает добавление UserService с аннотацией @Bean и внедрение его в UserController, что успешно завершает тест.## Примечания Этот фреймворк представляет собой реализацию некоторых ключевых аспектов Spring, но все еще имеет множество недостатков и недоработок. В нем не описаны и не интегрированы механизмы сохранения данных, а также не учтены многопоточные ситуации. Поэтому рекомендуется использовать этот код исключительно для понимания фреймворка и повышения своих навыков. Если у вас есть интерес к этому проекту, пожалуйста, свяжитесь со мной или оставьте issue. Я буду рад возможности обменяться опытом с вами. 😄

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/nsgxa-mini-spring.git
git@api.gitlife.ru:oschina-mirror/nsgxa-mini-spring.git
oschina-mirror
nsgxa-mini-spring
nsgxa-mini-spring
master