springboot博客系统带后台管理权限系统源码

  前言:本文将向您展示了如何结合Spring Boot和Kotlin的强大功能,高效地构建一个博客系统。如果您从Kotlin开始,您可以通过阅读参考文档、遵循Kotlin Koans在线教程或者仅仅使用Spring Framework参考文档(现在提供了Kotlin的代码示例)来学习这门语言。

  源码:s.ymzan.top

  Spring Framework和Spring Boot参考文档中记录了Spring Kotlin支持。如果您需要帮助,可以在StackOverflow上搜索spring和kotlin标签,或者在kotlin Slack的#spring频道进行讨论。

  一、创建新项目

  首先,我们需要创建Spring Boot应用程序,这可以通过多种方式实现。

  使用Initializr网站

  选择Kotlin语言。Gradle是Kotlin中最常用的构建工具,它提供了一个Kotlin DSL,在生成Kotlin项目时默认使用,所以这是推荐的选择。但是,如果您对Maven比较熟悉,也可以使用它。注意,您可以使用Gradle -project默认选择Kotlin和Gradle。

  1、选择“Gradle Project”或者让默认的“Maven Project”,这取决于你想要使用的构建工具;

  2、输入以下工件坐标:blog;

  3、添加以下依赖项:Spring Web、Mustache、Spring Data JPA、H2 Database和Spring Boot DevTools;

  4、单击“生成项目”。

  zip文件在根目录中包含一个标准项目,因此您可能希望在解包之前创建一个空目录。

  二、使用命令行

  你可以在命令行中使用Initializr HTTP API,例如,在UN*X之类的系统上使用curl:如果你想使用Gradle,添加-d type= Gradle -project。

  $ mkdir blog && cd blog

  $ curl start.spring.io/starter.zip -d language=kotlin -d dependencies=web,mustache,jpa,h2,devtools -d packageName=com.example.blog -d name=Blog -o blog.zip

  三、使用IntelliJ IDEA

  Spring Initializr也集成在IntelliJ IDEA Ultimate版中,允许你创建和导入一个新项目,而不需要离开IDE使用命令行或web UI。

  要访问向导,转到文件|新建|项目,并选择Spring Initializr。

  按照向导的步骤使用以下参数:工件:“博客”,类型:Maven项目或Gradle项目,语言:芬兰湾的科特林,名称:“博客”和依赖项:“Spring Web Starter”,“Mustache”,“Spring Data JPA”,“H2 Database”和“Spring Boot DevTools”。

  四、理解Gradle构建

  如果您正在使用Maven Build,您可以跳到专门的部分。

  import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

  plugins {

  kotlin("plugin.jpa") version "1.4.32"

  id("org.springframework.boot") version "2.4.4"

  id("io.spring.dependency-management") version "1.0.11.RELEASE"

  kotlin("jvm") version "1.4.32"

  kotlin("plugin.spring") version "1.4.32"

  }

  插件

  除了明显的Kotlin Gradle插件,默认配置声明了Kotlin - Spring插件,它会自动打开带有Spring注释的类和方法(与Java不同,Kotlin的默认限定符是final)或元注释的。这对于创建@Configuration或@Transactional bean非常有用,而不需要添加开放限定符(例如CGLIB代理所需)。

  为了能够在JPA中使用Kotlin的非空属性,Kotlin JPA插件也被启用了。它为任何带有@Entity, @MappedSuperclass或@ embed注解的类生成无参数构造函数。

  五、编译器选项

  Kotlin的关键特性之一是空值安全——它在编译时干净地处理空值,而不是在运行时遇到著名的NullPointerException。通过声明可空性和表达“值或无值”语义,这使得应用程序更安全,而无需支付像Optional这样的包装器的成本。注意,Kotlin允许使用带有空值的函数结构;查看Kotlin零安全的全面指南。

  tasks.withType<KotlinCompile> {

  kotlinOptions {

  freeCompilerArgs = listOf("-Xjsr305=strict")

  jvmTarget = "1.8"

  }

  }

  尽管Java不允许在它的类型系统中表达空安全,Spring框架通过在org.springframework.lang包中声明的工具友好的注释,为整个Spring框架API提供了空安全。默认情况下,Kotlin中使用的Java api的类型被识别为放松空检查的平台类型。Kotlin对JSR 305注解+ Spring空值性注解的支持,为Kotlin开发者提供了整个Spring框架API的空值安全性,并在编译时处理与空值相关的问题。

  可以通过添加带有strict选项的-Xjsr305编译器标志来启用该特性。

  还请注意,Kotlin编译器被配置为生成Java 8字节码(默认情况下是Java 6)。

  六、依赖关系

  三类Spring Boot web应用程序需要Kotlin特定库,并默认配置:Kotlin -stdlib-jdk8是Kotlin标准库的Java 8变体、Kotlin -reflect是Kotlin反射库和jackson-module-kotlin增加了对Kotlin类和数据类的序列化/反序列化的支持(可以自动使用单个构造函数类,也支持那些具有二级构造函数或静态工厂的类)。

  dependencies {

  implementation("org.springframework.boot:spring-boot-starter-data-jpa")

  implementation("org.springframework.boot:spring-boot-starter-mustache")

  implementation("org.springframework.boot:spring-boot-starter-web")

  implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

  implementation("org.jetbrains.kotlin:kotlin-reflect")

  implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

  runtimeOnly("com.h2database:h2")

  runtimeOnly("org.springframework.boot:spring-boot-devtools")

  testImplementation("org.springframework.boot:spring-boot-starter-test")

  }

  Spring Boot Gradle插件会自动使用通过Kotlin Gradle插件声明的Kotlin版本。

  现在可以更深入地了解生成的应用程序。

  七、理解Maven构建

  除了明显的Kotlin Maven插件外,默认配置声明了Kotlin - Spring插件,该插件自动打开带有Spring注释的类和方法(与Java不同,Kotlin的默认限定符是final)或元注释。这对于创建@Configuration或@Transactional bean非常有用,而不需要添加开放限定符(例如CGLIB代理所需)。

  为了能够在JPA中使用Kotlin的非空属性,Kotlin JPA插件也被启用了。它为任何带有@Entity, @MappedSuperclass或@ embed注解的类生成无参数构造函数。

  <build>

  <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>

  <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>

  <plugins>

  <plugin>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-maven-plugin</artifactId>

  </plugin>

  <plugin>

  <groupId>org.jetbrains.kotlin</groupId>

  <artifactId>kotlin-maven-plugin</artifactId>

  <configuration>

  <compilerPlugins>

  <plugin>jpa</plugin>

  <plugin>spring</plugin>

  </compilerPlugins>

  <args>

  <arg>-Xjsr305=strict</arg>

  </args>

  </configuration>

  <dependencies>

  <dependency>

  <groupId>org.jetbrains.kotlin</groupId>

  <artifactId>kotlin-maven-noarg</artifactId>

  <version>${kotlin.version}</version>

  </dependency>

  <dependency>

  <groupId>org.jetbrains.kotlin</groupId>

  <artifactId>kotlin-maven-allopen</artifactId>

  <version>${kotlin.version}</version>

  </dependency>

  </dependencies>

  </plugin>

  </plugins>

  </build>

  Kotlin的关键特性之一是空值安全——它在编译时干净地处理空值,而不是在运行时遇到著名的NullPointerException。通过声明可空性和表达“值或无值”语义,这使得应用程序更安全,而无需支付像Optional这样的包装器的成本。注意,Kotlin允许使用带有空值的函数结构;查看Kotlin零安全的全面指南。

  尽管Java不允许在它的类型系统中表达空安全,Spring框架通过在org.springframework.lang包中声明的工具友好的注释,为整个Spring框架API提供了空安全。默认情况下,Kotlin中使用的Java api的类型被识别为放松空检查的平台类型。Kotlin对JSR 305注解+ Spring空值性注解的支持,为Kotlin开发者提供了整个Spring框架API的空值安全性,并在编译时处理与空值相关的问题。

  可以通过添加带有strict选项的-Xjsr305编译器标志来启用该特性。

  还请注意,Kotlin编译器被配置为生成Java 8字节码(默认情况下是Java 6)。

  八、依赖关系

  3 .此类Spring Boot web应用程序需要Kotlin特定库,并默认配置:Kotlin -stdlib-jdk8是Kotlin标准库的Java 8变体、Kotlin -reflect是Kotlin反射库(从Spring Framework 5开始是强制性的)和jackson-module-kotlin增加了对Kotlin类和数据类的序列化/反序列化的支持(可以自动使用单个构造函数类,也支持那些具有二级构造函数或静态工厂的类)

  <dependencies>

  <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-data-jpa</artifactId>

  </dependency>

  <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-mustache</artifactId>

  </dependency>

  <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-web</artifactId>

  </dependency>

  <dependency>

  <groupId>com.fasterxml.jackson.module</groupId>

  <artifactId>jackson-module-kotlin</artifactId>

  </dependency>

  <dependency>

  <groupId>org.jetbrains.kotlin</groupId>

  <artifactId>kotlin-reflect</artifactId>

  </dependency>

  <dependency>

  <groupId>org.jetbrains.kotlin</groupId>

  <artifactId>kotlin-stdlib-jdk8</artifactId>

  </dependency>

  <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-devtools</artifactId>

  <scope>runtime</scope>

  </dependency>

  <dependency>

  <groupId>com.h2database</groupId>

  <artifactId>h2</artifactId>

  <scope>runtime</scope>

  </dependency>

  <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-test</artifactId>

  <scope>test</scope>

  </dependency>

  </dependencies>

  九、理解生成的应用程序

  与Java相比,您可以注意到缺少分号,空类上缺少括号(如果需要通过@Bean注释声明bean,可以添加一些括号),以及使用runApplication顶级函数。runApplication (*args)是SpringApplication.run(BlogApplication::class.java, *args)的Kotlin习惯替代品,可以用以下语法来定制应用程序。

  package com.example.blog

  import org.springframework.boot.autoconfigure.SpringBootApplication

  import org.springframework.boot.runApplication

  @SpringBootApplication

  class BlogApplication

  fun main(args: Array<String>) {

  runApplication<BlogApplication>(*args)

  }

  十、编写您的第一个Kotlin控制器

  让我们创建一个简单的控制器来显示一个简单的web页面。

  package com.example.blog

  import org.springframework.stereotype.Controller

  import org.springframework.ui.Model

  import org.springframework.ui.set

  import org.springframework.web.bind.annotation.GetMapping

  @Controller

  class HtmlController {

  @GetMapping("/")

  fun blog(model: Model): String {

  model["title"] = "Blog"

  return "blog"

  }

  }

  注意,我们在这里使用的是一个Kotlin扩展,它允许向现有的Spring类型添加Kotlin函数或操作符。这里我们导入了org.springframework.ui.set扩展函数,以便能够编写model["title"] = "Blog"而不是model。addAttribute(“标题”、“博客”)。Spring Framework KDoc API列出了所有为丰富Java API而提供的Kotlin扩展。

  我们还需要创建相关的Mustache模板。

  通过运行BlogApplication的主函数来启动web应用。kt,登陆http://localhost:8080/,你会看到一个严肃的网页,标题是"博客"

  结论

  我们现在已经完成了这个springboot博客系统的构建

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容