loveqq-framework, легковесный ioc/aop/javafx фреймворк
Легковесный ioc/aop фреймворк, с более мощными возможностями условного вывода по сравнению с Spring; абстрагирует MVC-модель, предоставляя встроенные серверы reactor-netty и tomcat; Предоставляет фреймворк javafx mvvm, который позволяет реализовать двустороннее связывание модели и данных; поддерживает динамическое конфигурирование источников данных; поддерживает аннотации для кэширования; Включает аспекты, reactor-netty, tomcat, nacos, feign, mybatis, spring-tx, jsr303-valid, logback, jakarta-mail, quartz, xxl-job, pagehelper, redisson, shiro, thymeleaf, автоматическое конфигурирование источников данных, генератор уникальных идентификаторов от Baidu и другие часто используемые компоненты; По умолчанию предоставляет уменьшенные jar-пакеты, поддерживающие запуск с помощью jarindex, что позволяет быстрее запускать приложение; Предоставлен Ruoyi-for-loveqq версия, которая заменяет Spring и все его starter, готовая к использованию.
Ядро проекта, включает общие утилиты, запуск jar index, утилиты для обобщенных типов, утилиты для доступа к базе данных JDBC, утилиты для обертки bean, утилиты для чтения пакетов, утилиты для преобразования json, а также интерфейсы и аннотации для автоматического конфигурирования. Для получения подробной информации нажмите loveqq-core модуль README.md.## loveqq-boot Конкретная реализация ioc-контейнера, автоматическое подключение, агенты области действия (одиночный/прототип/обновление), агенты ленивого подключения, автоматическое связывание свойств конфигурационных файлов (поддерживает связывание сложных вложенных типов), условные аннотации, проверка условий JSR, асинхронные события, динамические агенты, SPI, пользовательские загрузчики классов jar index и т. д. Для получения подробной информации нажмите loveqq-boot модуль README.md.
Модуль AOP, поддерживающий совпадение путей ant, совпадение типов аннотаций, интеграцию с AspectJ для совпадения выражений pointcut. Для получения подробной информации нажмите loveqq-aop модуль README.md.
Запускатель источников данных, поддерживающий автоматическое конфигурирование HikariCP, druid, tomcat-jdbc, динамическое конфигурирование источников данных. Для получения подробной информации нажмите loveqq-boot-starter-datasource модуль README.md.## loveqq-data-korm Утилиты для доступа к базе данных, реализованные на основе прокси для интерфейсного доступа JDBC, поддерживающие аннотации для написания SQL или динамического SQL на основе шаблонных движков (например: enjoy/freemarker).
Генератор кода и шаблоны по умолчанию, поддерживающие шаблоны программирования на Java, enjoy/freemarker, а также шаблоны JSP (требуется поддержка k-jte) или пользовательские шаблонные движки.## loveqq-mvc-core Основные абстракции MVC для поддержки различных веб-серверов, включающие регистрацию маршрутов, привязку параметров, диспетчеризацию запросов, интерцепторы запросов и т.д. Для получения подробной информации перейдите по ссылке loveqq-mvc-core модуль README.md.
Реализация servlet для паттерна MVC, включающая реализацию DispatcherServlet, а также автоматическое конфигурирование Filter и Servlet. Сопутствующий запускатель — loveqq-boot-starter-tomcat. Для получения подробной информации перейдите по ссылке loveqq-mvc-servlet модуль README.md.
Реализация паттерна MVC для Netty, включающая реализацию DispatcherHandler и автоматическое конфигурирование пользовательских Filter. Сопутствующий запускатель — loveqq-boot-starter-netty. Для получения подробной информации перейдите по ссылке loveqq-mvc-netty модуль README.md.
Основные абстракции кэширования loveqq, по умолчанию использующие встроенный кэш. Поддерживает аннотации кэширования, а также унифицированный подход к использованию командных и реактивных аннотаций кэширования. Для получения подробной информации перейдите по ссылке loveqq-cache-core модуль README.md.
Реализация кэширования loveqq на основе Redis
Обязательный модуль для запуска микросервисной архитектуры## loveqq-boot-starter-validator Интеграция jsr303-validator и добавление пользовательских аннотаций ограничений, позволяющая реализовать динамическое связывание проверки на основе выражений OGNL.
Интеграция сервиса открытия и конфигурации Nacos
Интеграция автоматического конфигурирования Dubbo
Интеграция автоматического конфигурирования Feign, совместимая с центром регистрации, поддерживает аннотации loveqq-mvc
Интеграция автоматического конфигурирования RocketMQ
Интеграция поддержки Redis на основе Redisson, а также встроенного простого реализации MQ на основе Redis
Быстрое создание SDK, требующее только написания моделей запросов и ответов, поддерживает интерцепторы, легко расширяемо, поддерживает командный и реактивный стили
Фреймворк Javafx MVVM, реализующий двустороннее связывание представления и модели данных. В коде достаточно оперировать данными, чтобы они отражались в представлении, а редактирование данных в представлении отражалось в модели. Для получения подробной информации перейдите по ссылке loveqq-javafx модуль README.md.
Основанный на фреймворке loveqq монолитный вариант Ruoyi, который удаляет нижележащие Spring и Spring Boot Starter. Подробности можно найти в списке репозиториев.### Пример
package com.kfyty.demo;
import com.kfyty.loveqq.framework.boot.K;
import com.kfyty.loveqq.framework.boot.validator.annotation.Condition;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.Async;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.SpringBootApplication;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.EventListener;
import com.kfyty.loveqq.framework.core.event.ContextRefreshedEvent;
import com.kfyty.loveqq.framework.data.cache.core.annotation.Cacheable;
import com.kfyty.loveqq.framework.web.core.annotation.GetMapping;
import com.kfyty.loveqq.framework.web.core.autoconfig.annotation.EnableWebMvc;
import lombok.Data;
@Async
@EnableWebMvc
@EventListener
@SpringBootApplication
public class Main {
public static void main(String[] args) {
K.run(Main.class, args);
}
@Cacheable
@GetMapping
public User hello(@Valid User user) {
return user;
}
@Async
@EventListener
public void onStarted(ContextRefreshedEvent event) {
log.info("started succeed !");
}
@Data
public static class User {
@Condition(when = "type == 1", then = "photo != null", message = "type=1时,图片不能为空")
private Integer type;
private String photo;
}
}
Рекомендуется, чтобы проект наследовался от родительского модуля loveqq-framework
<parent>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-framework</artifactId>
<version>1.1.1</version>
</parent>
<dependencies>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot-starter-logback</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
</dependencies>
При сборке необходимо добавить следующую конфигурацию в подмодуль, чтобы задать запускаемый класс и сгенерировать jar index
<properties>
<boot-start-class>com.kfyty.demo.Main</boot-start-class>
</properties>
package com.kfyty.demo;
import com.kfyty.loveqq.framework.boot.K;
import com.kfyty.loveqq.framework.boot.validator.annotation.Condition;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.Async;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.SpringBootApplication;
import com.kfyty.loveqq.framework.core.autoconfig.annotation.EventListener;
import com.kfyty.loveqq.framework.core.event.ContextRefreshedEvent;
import com.kfyty.loveqq.framework.data.cache.core.annotation.Cacheable;
import com.kfyty.loveqq.framework.web.core.annotation.GetMapping;
import com.kfyty.loveqq.framework.web.core.autoconfig.annotation.EnableWebMvc;
import lombok.Data;
@Async
@EnableWebMvc
@EventListener
@SpringBootApplication
public class Main {
public static void main(String[] args) {
K.run(Main.class, args);
}
@Cacheable
@GetMapping
public User hello(@Valid User user) {
return user;
}
@Async
@EventListener
public void onStarted(ContextRefreshedEvent event) {
log.info("started succeed !");
}
@Data
public static class User {
@Condition(when = "type == 1", then = "photo != null", message = "type=1时,图片不能为空")
private Integer type;
private String photo;
}
}
Рекомендуется, чтобы проект наследовался от родительского модуля loveqq-framework
<parent>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-framework</artifactId>
<version>1.1.1</version>
</parent>
<dependencies>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
<dependency>
<groupId>com.kfyty</groupId>
<artifactId>loveqq-boot-starter-logback</artifactId>
<version>${loveqq.framework.version}</version>
</dependency>
</dependencies>
При сборке необходимо добавить следующую конфигурацию в подмодуль, чтобы задать запускаемый класс и сгенерировать jar index
<properties>
<boot-start-class>com.kfyty.demo.Main</boot-start-class>
</properties>
```<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
``````md
### gradle
Необходимо добавить следующие зависимости
```groovy
apply plugin: 'java'
group = 'com.kfyty.example'
version = '1.0-SNAPSHOT'
ext {
bootLibOutput = 'boot-lib'
bootMainClass = 'com.kfyty.loveqq.framework.core.support.BootLauncher'
bootStartClass = 'com.kfyty.demo.Main'
}
dependencies {
implementation 'com.kfyty:loveqq-framework:1.1.1@pom'
implementation 'com.kfyty:loveqq-boot:1.1.1'
implementation 'com.kfyty:loveqq-boot-starter-logback:1.1.1'
implementation 'org.ow2.asm:asm:9.5'
implementation 'org.javassist:javassist:3.29.0-GA'
compileOnly "org.projectlombok:lombok:1.18.30"
annotationProcessor "org.projectlombok:lombok:1.18.30"
}
allprojects {
compileJava {
options.encoding = "UTF-8"
}
}
При сборке необходимо добавить следующие конфигурации в подмодули для установки запускаемого класса и генерации jar index
// Копирование зависимостей
tasks.register('copyDependencies', Copy) {
from configurations.runtimeClasspath
into "$buildDir/libs/$rootProject.ext.bootLibOutput"
}
// Сборка jar index
tasks.register('buildJarIndex', JavaExec) {
mainClass = 'com.kfyty.loveqq.framework.core.lang.task.BuildJarIndexAntTask'
classpath = configurations.runtimeClasspath
args "-OUTPUT_DIRECTORY=$project.buildDir/libs"
args "-OUTPUT_JAR=$project.name-$project.version" + '.jar'
args "-OUTPUT_DEFAULT_JAR=$project.name-$project.version" + '.jar'
}
// jar, который заменяет по умолчанию jar
jar {
dependsOn copyDependencies
manifest {
attributes 'Main-Class': "$rootProject.ext.bootMainClass"
attributes 'Start-Class': "$rootProject.ext.bootStartClass"
attributes 'Class-Path': configurations.runtimeClasspath.files.collect { "$rootProject.ext.bootLibOutput/$it.name" }.join(' ')
}
}
// build, который заменяет по умолчанию build
build {
dependsOn buildJarIndex
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )