Day17-52.Enumerated types

本文介绍了Java SE 5引入的枚举类型(enum),包括其基本语法、如何使用以及一些内置的方法如toString(), ordinal() 和 values()。同时,文章还展示了如何在switch语句中使用枚举。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举类型


在JavaSE5中添加了一个看似很小的特性,即enum关键字,它使得我们在需要群组并使用枚举类型集时,可以很方便地处理。

在此之前,你需要创建一个整型常量集,但是这些枚举值并不会必然地将其自身的取值限制在这个常量集的范围之内,因此它们显得更有风险,且更难以使用。

枚举类型属于非常普遍的需求,C、C++和其他许多语言都已经拥有它了。

在JavaSE5之前,Java程序员在需要使用枚举类型时,必须了解很多细节并需要格外仔细,以正确地产生enum的效果。

现在Java也有了enum,并且它的功能比C/C++中的枚举类型要完备得多。

下面是一个简单的例子:

//: initialization/Spiciness.java

public enum Spiciness {
  NOT, MILD, MEDIUM, HOT, FLAMING
} ///:~


这里创建了一个名为Spiciness的枚举类型,它具有5个具名值。

由于枚举类型的实例是常量,因此按照命名惯例它们都用大写字母表示(如果在一个名字中有多个单词,用下划线将它们隔开)。

为了使用enum,需要创建一个该类型的引用,并将其赋值给某个实例:

//: initialization/SimpleEnumUse.java

public class SimpleEnumUse {
  public static void main(String[] args) {
    Spiciness howHot = Spiciness.MEDIUM;
    System.out.println(howHot);
  }
} /* Output:
MEDIUM
*///:~


在你创建enum时,编译器会自动添加一些有用的特性。

例如,它会创建toString()方法,以便你可以很方便地显示某个enum实例的名字,这正式上面的打印语句如何产生器输出的答案。

编译器还会创建ordinal()方法,用来表示某个特定enum常量的声明顺序,以及static vaues()方法,用来按照enum常量的声明顺序,产生由这些常量值构成的数组:

//: initialization/EnumOrder.java

public class EnumOrder {
  public static void main(String[] args) {
    for(Spiciness s : Spiciness.values())
      System.out.println(s + ", ordinal " + s.ordinal());
  }
} /* Output:
NOT, ordinal 0
MILD, ordinal 1
MEDIUM, ordinal 2
HOT, ordinal 3
FLAMING, ordinal 4
*///:~


尽管enum看起来像是一种新的数据类型,但是这个关键字只是为enum生成对应的类时,产生了某些编译器行为,因此在很大程度上,你可以将enum当作其他任何类来处理。

事实上,enum确实是类,并且具有自己的方法。

enum有一个特别实用的特性,即它可以在switch语句内使用:

//: initialization/Burrito.java

public class Burrito {
  Spiciness degree;
  public Burrito(Spiciness degree) { this.degree = degree;}
  public void describe() {
    System.out.print("This burrito is ");
    switch(degree) {
      case NOT:    System.out.println("not spicy at all.");
                   break;
      case MILD:
      case MEDIUM: System.out.println("a little hot.");
                   break;
      case HOT:
      case FLAMING:
      default:     System.out.println("maybe too hot.");
    }
  }	
  public static void main(String[] args) {
    Burrito 
	plain = new Burrito(Spiciness.NOT),
      greenChile = new Burrito(Spiciness.MEDIUM),
      jalapeno = new Burrito(Spiciness.HOT);
    plain.describe();
    greenChile.describe();
    jalapeno.describe();
  }
} /* Output:
This burrito is not spicy at all.
This burrito is a little hot.
This burrito is maybe too hot.
*///:~


由于switch是要在有限的可能值集合中进行选择,因此它与enum正是绝佳的组合。

请注意enum的命名能够倍加清楚地表明程序意欲何为的。

大体上,你可以将enum用作另外一种创建数据类型的方式,然后直接将所得到的类型拿来使用。

这正是关键所在,因此你不必过多地考虑它们。

在JavaSE5引进enum之前,你必须花费大量的精力去保证与其等价的枚举类型是安全可用的。

这些介绍对于你理解和使用基本的enum已经足够了,但是我们将在第19章中更加深入地探讨它们。



Summary

总结


构造器,这种精巧的初始化机制,应该给读者很强的暗示:初始化在Java中占有至关重要的地位。

C++的发明人Bjarne Stroustrup在设计C++期间,在针对C语言的生产效率所进行的最初调查中发现,大量编程错误都源于不正确的初始化。

这种错误很难发现,并且不恰当的清理也会导致类似问题。

因为构造器能保证正确的初始化和清理(没有正确的构造器调用,编译器就不允许创建对象),所以有了完全的控制,也很安全。

在C++中,析构(destruction)相当重要,因为用new创建的对象必须明确被销毁。

在Java中就不太需要了(不过当要用到的时候,你就只能自己动手了)。

在不需要类似析构函数的行为的时候,Java的垃圾回收器可以极大简化编程工作,而且在处理内存的时候也更安全。

有些垃圾回收器甚至能清理其他资源,比如图形和文件(file handles)。

然而,垃圾回收器确实也增加了运行时的开销。

而且Java解释器从来就很慢,所以这种开销到底造成了多大的影响也很难看出。

随着时间的推移,Java在性能方面已经取得长足的进步,但速度问题仍然是它涉足某些特定编程领域的障碍。

由于要保证所有对象都被创建,构造器实际上要比这里所讨论的更复杂。

特别当通过组合(composition)或继承(inheritance)生成新类的时候,这种保证仍然成立,并且需要一些附加的语法来提供支持。

在后面的章节中,读者将学习到有关组合、集成以及它们对构造器造成的影响等方面的知识。

D:\IDEA\jdk11\jdk1.8.0_451\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2024.2.4\lib\idea_rt.jar=51460:D:\IDEA\IntelliJ IDEA 2024.2.4\bin" -Dfile.encoding=UTF-8 -classpath D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\charsets.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\deploy.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\access-bridge-32.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\access-bridge.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\cldrdata.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\dnsns.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\jaccess.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\localedata.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\nashorn.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\sunec.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\sunjce_provider.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\sunmscapi.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\sunpkcs11.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\ext\zipfs.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\javaws.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\jce.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\jfr.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\jsse.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\management-agent.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\plugin.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\resources.jar;D:\IDEA\jdk11\jdk1.8.0_451\jre\lib\rt.jar;E:\AliCloud\rulin-blog\pblog\target\classes;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.4.1\spring-boot-starter-web-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter\2.4.1\spring-boot-starter-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot\2.4.1\spring-boot-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.4.1\spring-boot-starter-logging-2.4.1.jar;C:\Users\ASUS\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\ASUS\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\ASUS\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;C:\Users\ASUS\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\ASUS\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\ASUS\.m2\repository\org\yaml\snakeyaml\1.27\snakeyaml-1.27.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.4.1\spring-boot-starter-json-2.4.1.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.4.1\spring-boot-starter-tomcat-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.41\tomcat-embed-core-9.0.41.jar;C:\Users\ASUS\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.41\tomcat-embed-websocket-9.0.41.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-web\5.3.2\spring-web-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-beans\5.3.2\spring-beans-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-webmvc\5.3.2\spring-webmvc-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-context\5.3.2\spring-context-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-expression\5.3.2\spring-expression-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-log4j\1.3.8.RELEASE\spring-boot-starter-log4j-1.3.8.RELEASE.jar;C:\Users\ASUS\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.30\jcl-over-slf4j-1.7.30.jar;C:\Users\ASUS\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\ASUS\.m2\repository\org\slf4j\slf4j-log4j12\1.7.30\slf4j-log4j12-1.7.30.jar;C:\Users\ASUS\.m2\repository\cn\dev33\sa-token-spring-boot-starter\1.29.0\sa-token-spring-boot-starter-1.29.0.jar;C:\Users\ASUS\.m2\repository\cn\dev33\sa-token-servlet\1.29.0\sa-token-servlet-1.29.0.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-validation\2.4.1\spring-boot-starter-validation-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;C:\Users\ASUS\.m2\repository\org\hibernate\validator\hibernate-validator\6.1.6.Final\hibernate-validator-6.1.6.Final.jar;C:\Users\ASUS\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\ASUS\.m2\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\ASUS\.m2\repository\net\bytebuddy\byte-buddy\1.10.18\byte-buddy-1.10.18.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-core\5.3.2\spring-core-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-jcl\5.3.2\spring-jcl-5.3.2.jar;C:\Users\ASUS\.m2\repository\mysql\mysql-connector-java\8.0.22\mysql-connector-java-8.0.22.jar;C:\Users\ASUS\.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.22\druid-spring-boot-starter-1.1.22.jar;C:\Users\ASUS\.m2\repository\com\alibaba\druid\1.1.22\druid-1.1.22.jar;C:\Users\ASUS\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.4.1\spring-boot-autoconfigure-2.4.1.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.3.1\mybatis-plus-boot-starter-3.3.1.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus\3.3.1\mybatis-plus-3.3.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.4.1\spring-boot-starter-jdbc-2.4.1.jar;C:\Users\ASUS\.m2\repository\com\zaxxer\HikariCP\3.4.5\HikariCP-3.4.5.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-jdbc\5.3.2\spring-jdbc-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\apache\velocity\velocity-engine-core\2.0\velocity-engine-core-2.0.jar;C:\Users\ASUS\.m2\repository\org\apache\commons\commons-lang3\3.11\commons-lang3-3.11.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus-generator\3.3.2\mybatis-plus-generator-3.3.2.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus-extension\3.3.2\mybatis-plus-extension-3.3.2.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus-core\3.3.2\mybatis-plus-core-3.3.2.jar;C:\Users\ASUS\.m2\repository\com\baomidou\mybatis-plus-annotation\3.3.2\mybatis-plus-annotation-3.3.2.jar;C:\Users\ASUS\.m2\repository\com\github\jsqlparser\jsqlparser\3.1\jsqlparser-3.1.jar;C:\Users\ASUS\.m2\repository\org\mybatis\mybatis\3.5.4\mybatis-3.5.4.jar;C:\Users\ASUS\.m2\repository\org\mybatis\mybatis-spring\2.0.4\mybatis-spring-2.0.4.jar;C:\Users\ASUS\.m2\repository\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.4.1\spring-boot-starter-aop-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-aop\5.3.2\spring-aop-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar;C:\Users\ASUS\.m2\repository\com\alibaba\fastjson\2.0.7\fastjson-2.0.7.jar;C:\Users\ASUS\.m2\repository\com\alibaba\fastjson2\fastjson2-extension\2.0.7\fastjson2-extension-2.0.7.jar;C:\Users\ASUS\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.7\fastjson2-2.0.7.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-spring-boot-starter\3.0.3\knife4j-spring-boot-starter-3.0.3.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-spring-boot-autoconfigure\3.0.3\knife4j-spring-boot-autoconfigure-3.0.3.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-spring\3.0.3\knife4j-spring-3.0.3.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-annotations\3.0.3\knife4j-annotations-3.0.3.jar;C:\Users\ASUS\.m2\repository\io\swagger\swagger-annotations\1.5.22\swagger-annotations-1.5.22.jar;C:\Users\ASUS\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.2\swagger-annotations-2.1.2.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-core\3.0.3\knife4j-core-3.0.3.jar;C:\Users\ASUS\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-swagger2\3.0.0\springfox-swagger2-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-spi\3.0.0\springfox-spi-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-schema\3.0.0\springfox-schema-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-swagger-common\3.0.0\springfox-swagger-common-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-spring-web\3.0.0\springfox-spring-web-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\github\classgraph\classgraph\4.8.83\classgraph-4.8.83.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-spring-webflux\3.0.0\springfox-spring-webflux-3.0.0.jar;C:\Users\ASUS\.m2\repository\org\mapstruct\mapstruct\1.3.1.Final\mapstruct-1.3.1.Final.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-spring-webmvc\3.0.0\springfox-spring-webmvc-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-core\3.0.0\springfox-core-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-oas\3.0.0\springfox-oas-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\swagger\core\v3\swagger-models\2.1.2\swagger-models-2.1.2.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-bean-validators\3.0.0\springfox-bean-validators-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\swagger\swagger-models\1.5.22\swagger-models-1.5.22.jar;C:\Users\ASUS\.m2\repository\io\swagger\swagger-core\1.5.22\swagger-core-1.5.22.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.11.3\jackson-dataformat-yaml-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\google\guava\guava\27.0.1-android\guava-27.0.1-android.jar;C:\Users\ASUS\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\ASUS\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\ASUS\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\ASUS\.m2\repository\org\checkerframework\checker-compat-qual\2.5.2\checker-compat-qual-2.5.2.jar;C:\Users\ASUS\.m2\repository\com\google\errorprone\error_prone_annotations\2.2.0\error_prone_annotations-2.2.0.jar;C:\Users\ASUS\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\ASUS\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.17\animal-sniffer-annotations-1.17.jar;C:\Users\ASUS\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-boot-starter\3.0.0\springfox-boot-starter-3.0.0.jar;C:\Users\ASUS\.m2\repository\io\springfox\springfox-data-rest\3.0.0\springfox-data-rest-3.0.0.jar;C:\Users\ASUS\.m2\repository\org\springframework\plugin\spring-plugin-core\2.0.0.RELEASE\spring-plugin-core-2.0.0.RELEASE.jar;C:\Users\ASUS\.m2\repository\org\springframework\plugin\spring-plugin-metadata\2.0.0.RELEASE\spring-plugin-metadata-2.0.0.RELEASE.jar;C:\Users\ASUS\.m2\repository\com\github\xiaoymin\knife4j-spring-ui\3.0.3\knife4j-spring-ui-3.0.3.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-configuration-processor\2.4.1\spring-boot-configuration-processor-2.4.1.jar;C:\Users\ASUS\.m2\repository\cn\dev33\sa-token-dao-redis-jackson\1.29.0\sa-token-dao-redis-jackson-1.29.0.jar;C:\Users\ASUS\.m2\repository\cn\dev33\sa-token-core\1.29.0\sa-token-core-1.29.0.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\2.4.1\spring-boot-starter-data-redis-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\data\spring-data-redis\2.4.2\spring-data-redis-2.4.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\data\spring-data-keyvalue\2.4.2\spring-data-keyvalue-2.4.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-oxm\5.3.2\spring-oxm-5.3.2.jar;C:\Users\ASUS\.m2\repository\io\lettuce\lettuce-core\6.0.1.RELEASE\lettuce-core-6.0.1.RELEASE.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-common\4.1.55.Final\netty-common-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-handler\4.1.55.Final\netty-handler-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-transport\4.1.55.Final\netty-transport-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\projectreactor\reactor-core\3.4.1\reactor-core-3.4.1.jar;C:\Users\ASUS\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\ASUS\.m2\repository\org\apache\commons\commons-pool2\2.9.0\commons-pool2-2.9.0.jar;C:\Users\ASUS\.m2\repository\com\github\penggle\kaptcha\2.3.2\kaptcha-2.3.2.jar;C:\Users\ASUS\.m2\repository\com\jhlabs\filters\2.0.235-1\filters-2.0.235-1.jar;C:\Users\ASUS\.m2\repository\com\github\ulisesbocchio\jasypt-spring-boot-starter\2.1.0\jasypt-spring-boot-starter-2.1.0.jar;C:\Users\ASUS\.m2\repository\com\github\ulisesbocchio\jasypt-spring-boot\2.1.0\jasypt-spring-boot-2.1.0.jar;C:\Users\ASUS\.m2\repository\org\jasypt\jasypt\1.9.2\jasypt-1.9.2.jar;C:\Users\ASUS\.m2\repository\com\qiniu\qiniu-java-sdk\7.7.0\qiniu-java-sdk-7.7.0.jar;C:\Users\ASUS\.m2\repository\com\squareup\okhttp3\okhttp\3.14.2\okhttp-3.14.2.jar;C:\Users\ASUS\.m2\repository\com\squareup\okio\okio\1.17.2\okio-1.17.2.jar;C:\Users\ASUS\.m2\repository\com\google\code\gson\gson\2.8.5\gson-2.8.5.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-data-elasticsearch\2.4.1\spring-boot-starter-data-elasticsearch-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\data\spring-data-elasticsearch\4.1.2\spring-data-elasticsearch-4.1.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-tx\5.3.2\spring-tx-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\data\spring-data-commons\2.4.2\spring-data-commons-2.4.2.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\transport-netty4-client\7.9.3\transport-netty4-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-buffer\4.1.55.Final\netty-buffer-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-codec\4.1.55.Final\netty-codec-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-codec-http\4.1.55.Final\netty-codec-http-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\io\netty\netty-resolver\4.1.55.Final\netty-resolver-4.1.55.Final.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\client\elasticsearch-rest-high-level-client\7.9.3\elasticsearch-rest-high-level-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch\7.9.3\elasticsearch-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch-core\7.9.3\elasticsearch-core-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch-secure-sm\7.9.3\elasticsearch-secure-sm-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch-x-content\7.9.3\elasticsearch-x-content-7.9.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-smile\2.11.3\jackson-dataformat-smile-2.11.3.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.11.3\jackson-dataformat-cbor-2.11.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch-geo\7.9.3\elasticsearch-geo-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-core\8.6.2\lucene-core-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-analyzers-common\8.6.2\lucene-analyzers-common-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-backward-codecs\8.6.2\lucene-backward-codecs-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-grouping\8.6.2\lucene-grouping-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-highlighter\8.6.2\lucene-highlighter-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-join\8.6.2\lucene-join-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-memory\8.6.2\lucene-memory-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-misc\8.6.2\lucene-misc-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-queries\8.6.2\lucene-queries-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-queryparser\8.6.2\lucene-queryparser-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-sandbox\8.6.2\lucene-sandbox-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-spatial-extras\8.6.2\lucene-spatial-extras-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-spatial3d\8.6.2\lucene-spatial3d-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\apache\lucene\lucene-suggest\8.6.2\lucene-suggest-8.6.2.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\elasticsearch-cli\7.9.3\elasticsearch-cli-7.9.3.jar;C:\Users\ASUS\.m2\repository\net\sf\jopt-simple\jopt-simple\5.0.2\jopt-simple-5.0.2.jar;C:\Users\ASUS\.m2\repository\com\carrotsearch\hppc\0.8.1\hppc-0.8.1.jar;C:\Users\ASUS\.m2\repository\joda-time\joda-time\2.10.4\joda-time-2.10.4.jar;C:\Users\ASUS\.m2\repository\com\tdunning\t-digest\3.2\t-digest-3.2.jar;C:\Users\ASUS\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.9\HdrHistogram-2.1.9.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\jna\5.5.0\jna-5.5.0.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\client\elasticsearch-rest-client\7.9.3\elasticsearch-rest-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\apache\httpcomponents\httpasyncclient\4.1.4\httpasyncclient-4.1.4.jar;C:\Users\ASUS\.m2\repository\org\apache\httpcomponents\httpcore-nio\4.4.14\httpcore-nio-4.4.14.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\mapper-extras-client\7.9.3\mapper-extras-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\parent-join-client\7.9.3\parent-join-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\aggs-matrix-stats-client\7.9.3\aggs-matrix-stats-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\rank-eval-client\7.9.3\rank-eval-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\org\elasticsearch\plugin\lang-mustache-client\7.9.3\lang-mustache-client-7.9.3.jar;C:\Users\ASUS\.m2\repository\com\github\spullara\mustache\java\compiler\0.9.6\compiler-0.9.6.jar;C:\Users\ASUS\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-mail\2.4.1\spring-boot-starter-mail-2.4.1.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-context-support\5.3.2\spring-context-support-5.3.2.jar;C:\Users\ASUS\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\ASUS\.m2\repository\com\sun\activation\jakarta.activation\1.2.2\jakarta.activation-1.2.2.jar;C:\Users\ASUS\.m2\repository\eu\bitwalker\UserAgentUtils\1.21\UserAgentUtils-1.21.jar;C:\Users\ASUS\.m2\repository\com\github\oshi\oshi-core\6.0.0\oshi-core-6.0.0.jar;C:\Users\ASUS\.m2\repository\net\java\dev\jna\jna-platform\5.10.0\jna-platform-5.10.0.jar;C:\Users\ASUS\.m2\repository\net\java\dev\jna\jna\4.5.2\jna-4.5.2.jar;C:\Users\ASUS\.m2\repository\org\quartz-scheduler\quartz\2.3.2\quartz-2.3.2.jar;C:\Users\ASUS\.m2\repository\com\mchange\mchange-commons-java\0.2.15\mchange-commons-java-0.2.15.jar;C:\Users\ASUS\.m2\repository\cn\hutool\hutool-all\5.8.3\hutool-all-5.8.3.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-all\0.62.2\flexmark-all-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark\0.62.2\flexmark-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-abbreviation\0.62.2\flexmark-ext-abbreviation-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util\0.62.2\flexmark-util-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-admonition\0.62.2\flexmark-ext-admonition-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-anchorlink\0.62.2\flexmark-ext-anchorlink-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-aside\0.62.2\flexmark-ext-aside-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-attributes\0.62.2\flexmark-ext-attributes-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-autolink\0.62.2\flexmark-ext-autolink-0.62.2.jar;C:\Users\ASUS\.m2\repository\org\nibor\autolink\autolink\0.6.0\autolink-0.6.0.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-definition\0.62.2\flexmark-ext-definition-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-emoji\0.62.2\flexmark-ext-emoji-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-enumerated-reference\0.62.2\flexmark-ext-enumerated-reference-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-escaped-character\0.62.2\flexmark-ext-escaped-character-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-footnotes\0.62.2\flexmark-ext-footnotes-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-gfm-issues\0.62.2\flexmark-ext-gfm-issues-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-gfm-strikethrough\0.62.2\flexmark-ext-gfm-strikethrough-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-gfm-tasklist\0.62.2\flexmark-ext-gfm-tasklist-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-gfm-users\0.62.2\flexmark-ext-gfm-users-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-gitlab\0.62.2\flexmark-ext-gitlab-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-jekyll-front-matter\0.62.2\flexmark-ext-jekyll-front-matter-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-jekyll-tag\0.62.2\flexmark-ext-jekyll-tag-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-media-tags\0.62.2\flexmark-ext-media-tags-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-macros\0.62.2\flexmark-ext-macros-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-ins\0.62.2\flexmark-ext-ins-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-xwiki-macros\0.62.2\flexmark-ext-xwiki-macros-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-superscript\0.62.2\flexmark-ext-superscript-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-tables\0.62.2\flexmark-ext-tables-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-toc\0.62.2\flexmark-ext-toc-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-typographic\0.62.2\flexmark-ext-typographic-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-wikilink\0.62.2\flexmark-ext-wikilink-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-yaml-front-matter\0.62.2\flexmark-ext-yaml-front-matter-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-ext-youtube-embedded\0.62.2\flexmark-ext-youtube-embedded-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-html2md-converter\0.62.2\flexmark-html2md-converter-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-jira-converter\0.62.2\flexmark-jira-converter-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-pdf-converter\0.62.2\flexmark-pdf-converter-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\openhtmltopdf\openhtmltopdf-core\1.0.0\openhtmltopdf-core-1.0.0.jar;C:\Users\ASUS\.m2\repository\com\openhtmltopdf\openhtmltopdf-pdfbox\1.0.0\openhtmltopdf-pdfbox-1.0.0.jar;C:\Users\ASUS\.m2\repository\org\apache\pdfbox\pdfbox\2.0.16\pdfbox-2.0.16.jar;C:\Users\ASUS\.m2\repository\org\apache\pdfbox\fontbox\2.0.16\fontbox-2.0.16.jar;C:\Users\ASUS\.m2\repository\org\apache\pdfbox\xmpbox\2.0.16\xmpbox-2.0.16.jar;C:\Users\ASUS\.m2\repository\de\rototor\pdfbox\graphics2d\0.24\graphics2d-0.24.jar;C:\Users\ASUS\.m2\repository\com\openhtmltopdf\openhtmltopdf-rtl-support\1.0.0\openhtmltopdf-rtl-support-1.0.0.jar;C:\Users\ASUS\.m2\repository\com\ibm\icu\icu4j\59.1\icu4j-59.1.jar;C:\Users\ASUS\.m2\repository\com\openhtmltopdf\openhtmltopdf-jsoup-dom-converter\1.0.0\openhtmltopdf-jsoup-dom-converter-1.0.0.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-profile-pegdown\0.62.2\flexmark-profile-pegdown-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-ast\0.62.2\flexmark-util-ast-0.62.2.jar;C:\Users\ASUS\.m2\repository\org\jetbrains\annotations\15.0\annotations-15.0.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-builder\0.62.2\flexmark-util-builder-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-collection\0.62.2\flexmark-util-collection-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-data\0.62.2\flexmark-util-data-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-dependency\0.62.2\flexmark-util-dependency-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-format\0.62.2\flexmark-util-format-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-html\0.62.2\flexmark-util-html-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-misc\0.62.2\flexmark-util-misc-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-options\0.62.2\flexmark-util-options-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-sequence\0.62.2\flexmark-util-sequence-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-util-visitor\0.62.2\flexmark-util-visitor-0.62.2.jar;C:\Users\ASUS\.m2\repository\com\vladsch\flexmark\flexmark-youtrack-converter\0.62.2\flexmark-youtrack-converter-0.62.2.jar;C:\Users\ASUS\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\ASUS\.m2\repository\org\jsoup\jsoup\1.14.3\jsoup-1.14.3.jar;C:\Users\ASUS\.m2\repository\org\dom4j\dom4j\2.1.3\dom4j-2.1.3.jar;C:\Users\ASUS\.m2\repository\org\springframework\boot\spring-boot-starter-websocket\1.5.10.RELEASE\spring-boot-starter-websocket-1.5.10.RELEASE.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-messaging\5.3.2\spring-messaging-5.3.2.jar;C:\Users\ASUS\.m2\repository\org\springframework\spring-websocket\5.3.2\spring-websocket-5.3.2.jar;C:\Users\ASUS\.m2\repository\com\aliyun\oss\aliyun-sdk-oss\3.12.0\aliyun-sdk-oss-3.12.0.jar;C:\Users\ASUS\.m2\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;C:\Users\ASUS\.m2\repository\org\apache\httpcomponents\httpcore\4.4.14\httpcore-4.4.14.jar;C:\Users\ASUS\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\ASUS\.m2\repository\org\jdom\jdom2\2.0.6\jdom2-2.0.6.jar;C:\Users\ASUS\.m2\repository\org\codehaus\jettison\jettison\1.1\jettison-1.1.jar;C:\Users\ASUS\.m2\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;C:\Users\ASUS\.m2\repository\com\aliyun\aliyun-java-sdk-core\4.5.10\aliyun-java-sdk-core-4.5.10.jar;C:\Users\ASUS\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\ASUS\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\ASUS\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\ASUS\.m2\repository\org\jacoco\org.jacoco.agent\0.8.5\org.jacoco.agent-0.8.5-runtime.jar;C:\Users\ASUS\.m2\repository\org\ini4j\ini4j\0.5.4\ini4j-0.5.4.jar;C:\Users\ASUS\.m2\repository\io\opentracing\opentracing-api\0.33.0\opentracing-api-0.33.0.jar;C:\Users\ASUS\.m2\repository\io\opentracing\opentracing-util\0.33.0\opentracing-util-0.33.0.jar;C:\Users\ASUS\.m2\repository\io\opentracing\opentracing-noop\0.33.0\opentracing-noop-0.33.0.jar;C:\Users\ASUS\.m2\repository\com\aliyun\aliyun-java-sdk-ram\3.1.0\aliyun-java-sdk-ram-3.1.0.jar;C:\Users\ASUS\.m2\repository\com\aliyun\aliyun-java-sdk-kms\2.11.0\aliyun-java-sdk-kms-2.11.0.jar;C:\Users\ASUS\.m2\repository\org\lionsoul\ip2region\2.7.0\ip2region-2.7.0.jar;C:\Users\ASUS\.m2\repository\com\anji-plus\spring-boot-starter-captcha\1.3.0\spring-boot-starter-captcha-1.3.0.jar;C:\Users\ASUS\.m2\repository\com\anji-plus\captcha\1.3.0\captcha-1.3.0.jar com.rulin.BlogApplication SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/ASUS/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/ASUS/.m2/repository/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] ____ ____ _____ U| _"\ u U /"___|u |"_ /u \| |_) |/ \| | _ / U / // | __/ | |_| | \/ /_ |_| \____| /____| ||>>_ _)(|_ _//<<,- (__)__) (__)__) (__) (_/ Gitee: https://gitee.com/chengxuru/rulin-blog 2025-06-27 16:08:19.529 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext:596 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'apiArticleController' defined in file [E:\AliCloud\rulin-blog\pblog\target\classes\com\rulin\controller\api\ApiArticleController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.rulin.service.ArticleService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 2025-06-27 16:08:19.578 [main] ERROR o.s.b.diagnostics.LoggingFailureAnalysisReporter:40 - *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in com.rulin.controller.api.ApiArticleController required a bean of type 'com.rulin.service.ArticleService' that could not be found. Action: Consider defining a bean of type 'com.rulin.service.ArticleService' in your configuration. 进程已结束,退出代码为 1
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值