TODAY Infrastructure
Java-библиотека для инфраструктуры прикладного программного обеспечения.
Вы спрашиваете меня, как выглядит элегантный код? Тогда я должен показать его!
В основном для обучения технологиям, попутно предоставляя базовую структуру для собственного блога (на самом деле блог также был создан для изучения и практики технологий). Блог также открыт: https://github.com/TAKETODAY/today-blog.
Всё началось с изучения программирования в университете, позже я создал блог с помощью Java Servlet. В процессе разработки я обнаружил много повторяющегося кода, который мне показался неэлегантным, хотя тогда я только начинал изучать программирование. Поэтому, когда я изучал Struts2, я попытался написать программу, которая устраняла бы большую часть повторяющегося кода с помощью конфигурации XML. Так появился первый today-web (https://gitee.com/I-TAKE-TODAY/today-web/tree/v1.1.1/).
Позже, изучив Java аннотации, я реализовал версию программы, использующую аннотации для конфигурации (today-web аннотированная версия, https://gitee.com/I-TAKE-TODAY/today-web/tree/2.1.x/).
Сегодняшняя веб-версия с аннотациями только что появилась, и я также изучаю Spring, но чувствую, что контейнер IoC не очень удобен. Я видел в Интернете множество мини-Spring, поэтому решил попробовать создать свой собственный. Это решение было принято потому, что я уже написал today-web, и создание IoC должно быть несложным. Сначала я опирался на различные мини-пружины, и теперь, оглядываясь назад, понимаю, что это привело к некоторым ошибкам в моём понимании. С июня по декабрь 2021 года я углубился в изучение исходного кода Spring и исправил свои ошибки. Оказалось, что написать такую вещь действительно несложно, просто нужно немного поработать над элегантностью. Я считаю, что мой код элегантен. Не верите? Вы можете посетить мою прямую трансляцию на Bilibili (https://live.bilibili.com/22702726). (Я начал транслировать в прямом эфире написание этой библиотеки в 2021 году, а затем, из-за занятости на работе, перестал, но планирую возобновить, когда у меня будет время).
Когда я только начал писать (примерно в 2018 году, я также проверил записи о фиксации Git), я не знал, с чего начать, поэтому обратился к различным мини-пружинам, упомянутым выше. Таким образом, начался новый этап обучения. Изучение того, как сканировать файлы классов, изучение Java аннотаций, Java байт-кода, динамических прокси, повторное понимание интерфейсов, некоторые шаблоны проектирования, использование Git и постепенное осознание важности модульного тестирования. По мере углубления обучения фреймворк претерпел несколько рефакторингов, и у меня также сформировалось собственное мнение об инъекциях зависимостей. Постепенно я понял, что могу понять исходный код Spring. Spring действительно мощный.
Если вы спросите меня, как научиться программированию, я думаю, что создание собственных проектов — хороший способ. Мне ещё многое предстоит изучить. Например, знания в области распределённых систем, поэтому в будущем вы увидите появление таких проектов, как today-rpc, today-distributed-* и т. д.
buildscript {
repositories {
mavenLocal()
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
mavenCentral()
}
dependencies {
classpath "cn.taketoday:infra-gradle-plugin:5.0.0-Draft.1-SNAPSHOT"
}
}
apply plugin: "java"
apply plugin: 'cn.taketoday.application'
apply plugin: 'io.spring.dependency-management' // После добавления этого плагина можно автоматически импортировать infra-dependencies
repositories {
mavenLocal()
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven { url "https://maven.aliyun.com/repository/public" }
mavenCentral()
}
dependencies {
implementation 'cn.taketoday:ip2region-java:1.0-SNAPSHOT'
implementation 'cn.taketoday:today-starter-netty'
implementation 'cn.taketoday:today-starter-web'
}
Конкретный проект можно посмотреть в infra-samples (./infra-samples).
### Maven
```xml
<dependency>
<groupId>cn.taketoday</groupId>
<artifactId>today-starter-web</artifactId>
<version>${infraVersion}</version>
</dependency>
<dependency>
<groupId>cn.taketoday</groupId>
<artifactId>today-starter-netty</artifactId>
<version>${infraVersion}</version>
</dependency>
@Slf4j
@RestController
@InfraApplication
public class DemoApplication {
public static void main(String[] args) {
Application.run(DemoApplication.class, args);
}
@GET("/index")
public String index() {
return "Hello";
}
``` 🙏 **Благодарности**
Создание этого проекта было бы невозможно без следующих проектов:
* Spring Framework — https://github.com/spring-projects/spring-framework;
* Spring Boot — https://github.com/spring-projects/spring-boot;
* Jetbrains — https://www.jetbrains.com/?from=https://github.com/TAKETODAY/today-infrastructure. Спасибо компании Jetbrains за предоставление бесплатных открытых лицензий.
📄 **Лицензия**
Используется лицензия GPLv3 — https://github.com/TAKETODAY/today-infrastructure/blob/master/LICENSE.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )