Серия по созданию Spring-фреймворка Ручное создание Spring-фреймворка Содержимое будет обновляться, подробные руководства доступны на моем блоге https://blog.csdn.net/qq_31749835/article/details/90812799
Недавно изучил некоторые аспекты Spring, поэтому решил записать и реализовать основные функции Spring-фреймворка. Читая эти материалы, я надеюсь преодолеть страх перед Spring-фреймворком, ведь тщательное изучение помогает легко понять его работу. mini-spring стремится реализовать основные функции Spring, поэтому прошу опытных разработчиков посетить мой блог и помочь увеличить количество посещений!
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.
В блоге Создание мини-версии Spring-фреймворка с нуля — интеграция с сервером Tomcat на основе предыдущего шага по реализации запуска SpringBoot описана интеграция Tomcat-контейнера в наш мини-фреймворк Spring.
Сначала описаны основные принципы обработки запросов контейнером, анализируются процессы обработки и ответа на запросы Tomcat-контейнера. Затем описана конкретная реализация интеграции Tomcat, добавлены классы TomcatServer и TestServlet для инициализации контейнера и тестирования запросов Servlet. Когда TestServlet корректно обрабатывает запрос /test.json и возвращает строку "test", это указывает на корректную работу Servlet.
В статье Создание мини-версии Spring-фреймворка с нуля — реализация обработки MVC-запросов и ответов описана реализация основных функций Spring MVC. Используя сканирование пакетов и рефлексию, получают информацию о аннотациях и создают экземпляры, что позволяет реализовать обработку запросов и ответов.В модуле test приложение Application передаёт информацию о классах в модуль framework через MiniApplication. MiniApplication вызывает ClassScanner для сканирования пакетов, используя загрузчик классов для получения пути к классам (с дополнительной обработкой информации о jar-файлах), и возвращает список классов в MiniApplication. Затем HandlerManager получает информацию о классах и собирает их.TomcatServer изменяет путь URI для перехвата всех запросов через Tomcat на "/", перенаправляя их в DispatcherServlet. Метод service класса DispatcherServlet выполняет сопоставление URI, и при успешном сопоставлении вызывает метод resolveMappingHandler класса Handler для создания и возврата ответа.
Блог Создание небольшого фреймворка Spring с нуля — реализация управления бинами (IOC и DI) использует рефлексию для реализации внедрения зависимостей. Введены аннотации @Bean для маркировки классов, которые требуют управления, а также аннотация @Autowired для указания мест, где нужно внедрить экземпляры бинов. Внедрены также ключевые реализации класса BeanFactory, который предоставляет методы getBean для получения бинов и initBean для инициализации фабрики. В то же время изменен MappingHandler для получения бинов из фабрики.
Тестирование включает добавление UserService с аннотацией @Bean и внедрение его в UserController, что успешно завершает тест.## Примечания Этот фреймворк представляет собой реализацию некоторых ключевых аспектов Spring, но все еще имеет множество недостатков и недоработок. В нем не описаны и не интегрированы механизмы сохранения данных, а также не учтены многопоточные ситуации. Поэтому рекомендуется использовать этот код исключительно для понимания фреймворка и повышения своих навыков. Если у вас есть интерес к этому проекту, пожалуйста, свяжитесь со мной или оставьте issue. Я буду рад возможности обменяться опытом с вами. 😄
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )