3.反射系列:Type类型详解

本文详细介绍了Java泛型中的Type接口及其子接口,包括ParameterizedType、TypeVariable、GenericArrayType和WildcardType的作用与应用场景,通过具体示例展示了如何在运行时获取泛型信息。

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

https://blog.youkuaiyun.com/qq_30770095/article/details/79016257

什么是Type?

引用网上的话来说就是:
Type是一个空接口,所有类型的公共接口(父接口),其意义表示Java所有类型,这里所谓的类型是从Java整个语言角度来看的,比如原始类型、参数化类型(泛型)、类型变量及其数组等,可以理解为,Class(类)是Java对现实对象的抽象,而Type是对Java语言对象的抽象。

Type的类型

实现了Type接口的子接口为GenericArrayType(泛型数组类型),ParmeterizedType(参数化类型),TypeVariable<D>(类型变量),WildcardType(通配符类型)。实现了Type接口的子类有Class(类)。所有Type一共可以表示这5类数据。主要介绍的就是四个子接口。

Type的用处

 由于java1.5引入了泛型这一概念,大大方便了我们代码的编写和优化,但是考虑到泛型擦除这一问题,当我们的代码在运行时期会擦除所有的泛型,这一我们在运行时期想要获取某一类原来是带有泛型的,而后来被擦除了的数据的泛型类型时就会有问题。所以java引入了Type这一概念。Type也主要是为在运行时期获取泛型而服务。

接下来,我们开始介绍泛型中各子接口和子类的作用,在开始介绍之前我们了解一下编码过程中主要的运用到泛型的情况。
1.List<T>
2.Set<T> 
3.Map<K,V>
4.class<?>(自定义类或接口的泛型)

ParmeterizedType(参数化类型)的作用

    parameterizedType主要是用来表示 如 Collection<String>或者Class<T>。parameterizedType表示的类型非常的简单,只要带着泛型,除了不可以是数组和本类上定义的泛型以外,其他都被列入ParameterizedType的范围。
ParameterizedType的主要方法:

  1. Type[] getActualTypeArguments()
  2. 返回表示此类型实际类型参数的 Type 对象的数组。
  3. Type getOwnerType()
  4. 返回 Type 对象,表示此类型是其成员之一的类型。
  5. Type getRawType()
  6. 返回 Type 对象,表示声明此类型的类或接口。
接下来我们来看一个例子。
示例一:
现在有三个类,分别为Person,TypeBean以及ParameterizedTypeTest
Person类
  1. public class Person {
  2. @Override
  3. public String toString() {
  4. return "Person []";
  5. }
  6. class Animal <T> {
  7. public String name;
  8. }
  9. }

TypeBean类
  1. public class TypeBean<T> {
  2. public List<String> list;
  3. private Set<String>[] set;
  4. private List noGerList;
  5. Map.Entry<String,Integer> entry;
  6. Person.Animal<String> animal;
  7. String str = new String();
  8. T t;
  9. }


ParameterizedTypeTest类
  1. public class ParameterizedTypeTest{
  2. public static void main(String[] args) throws Exception {
  3. Class<TypeBean> bean = (Class<TypeBean>) Class.forName("TypeBean");
  4. Field[] declaredFields = bean.getDeclaredFields();
  5. int i =1;
  6. for (Field field : declaredFields) {
  7. field.setAccessible(true);
  8. System.out.println("--------------"+i);
  9. System.out.println("field name is : "+field.getName());
  10. System.out.print("field.getGenericType() instanceof ParameterizedType");
  11. System.out.println("--------"+(field.getGenericType() instanceof ParameterizedType));
  12. if(field.getName().equals("animal")){
  13. ParameterizedType type = (ParameterizedType) field.getGenericType();
  14. Type ownerType = type.getOwnerType();
  15. System.out.println("Person.Animal<String>的ownerType是。。。"+ownerType);
  16. Type rawType = type.getRawType();
  17. System.out.println("Person.Animal<String>的rawType是"+rawType);
  18. Type[] actualTypeArguments = type.getActualTypeArguments();
  19. for (Type type2 : actualTypeArguments) {
  20. System.out.println(type2.getTypeName()+"获取到的actualTypeArguments分别为:"+type2.getTypeName());
  21. }
  22. System.out.println("Person.Animal<String> instanceof ParameterizedType -----"+(type instanceof ParameterizedType));
  23. }
  24. System.out.println("--------------"+i);
  25. i++;
  26. }
  27. }
  28. }


运行ParameterizedTypeTest类得到的结果如下。
  1. --------------1
  2. field name is : list
  3. field.getGenericType() instanceof ParameterizedType--------true
  4. --------------1
  5. --------------2
  6. field name is : set
  7. field.getGenericType() instanceof ParameterizedType--------false
  8. --------------2
  9. --------------3
  10. field name is : noGerList
  11. field.getGenericType() instanceof ParameterizedType--------false
  12. --------------3
  13. --------------4
  14. field name is : entry
  15. field.getGenericType() instanceof ParameterizedType--------true
  16. --------------4
  17. --------------5
  18. field name is : animal
  19. field.getGenericType() instanceof ParameterizedType--------true
  20. Person.Animal<String>的ownerType是。。。class Person
  21. Person.Animal<String>的rawType是class Person$Animal
  22. java.lang.String获取到的actualTypeArguments分别为:java.lang.String
  23. Person.Animal<String> instanceof ParameterizedType -----true
  24. --------------5
  25. --------------6
  26. field name is : str
  27. field.getGenericType() instanceof ParameterizedType--------false
  28. --------------6
  29. --------------7
  30. field name is : t
  31. field.getGenericType() instanceof ParameterizedType--------false
  32. --------------7
第一个字段List<String> list 是ParameterizedType。
第二个字段Set<String>[] set由于是数组,所以不是ParameterizedType。
第三个字段List noGerList由于没有带泛型,所以也不是ParameterizedType。
第四个字段Map.Entry<String,Integer> entry 是parameterizedType。
第五个字段Person.Animal<String> animal 是parameterizedType。此处我们进一步使用了ParameterizedType的3个方法演示给大家看。我们可以看到ownerType是animal的外部类Person。这也印证了获取到的类型(Person)为原类型(Person.Animal)是其(Person)成员之一。(这里还有其他情况欢迎在评论区告诉。
而rawType则是其自身类型。
getActualTypeArguments()获取到的Type数组则是泛型中的所有类型。(例如Map<k,v>则获取到的数组中包含k,v这两个类型。并且k在前,v在后。)
第六个字段String str = new String();由于没有带泛型所有不是parameterizedType。
第七个字段T t 由于是本类上定义的泛型,所以也不行。

TypeVariable<D>(类型变量)的作用

TypeVariable 是各种类型变量的公共高级接口。类型变量在反射方法首次需要时创建(在此包中指定)。如果类型变量 t 由类型(即类、接口或注释类型)T 引用,而且 T 由 T 的第 n 个封闭类声明(请参见 JLS 8.1.2),那么创建 t 需要解析(请参见 JVMS 5)T 的第 i 个封闭类,其中 i = 0 到 n(包含)。创建某个类型变量决不能导致创建其边界。重复创建类型变量没有效果。

可以在运行时将多个对象实例化,以表示一个给定的类型变量。尽管类型变量仅创建一次,这并不意味着任何缓存实例的要求都表示类型变量。不过,表示类型变量的所有实例彼此必须相等 (equal())。因此,使用类型变量的用户决不能依靠实现此接口的类实例的身份。


这是api中的介绍,其实非常简单。这就是我们非常常用的声明类时的泛型。

例如: 
public class Test<T>{

}
这里的T的类型就属于TypeVariable。(注:T不能为数组。)
TypeVariable的主要方法
  1. Type[] getBounds()
  2. 返回表示此类型变量上边界的 Type 对象的数组。如上边界未显式声明,则为Object。
  3. D getGenericDeclaration()
  4. 返回 GenericDeclaration 对象,该对象表示声明此类型变量的一般声明。
  5. String getName()
  6. 返回此类型变量的名称,它出现在源代码中。

示例二:
现在有3个类 Person,TypeVariableBean,TypeVariableTest
TypeVariableBean类
  1. public class TypeVariableBean<T> {
  2. public List<String> list;
  3. Class<?> clz;
  4. private Set<String>[] set;
  5. private List noGerList;
  6. Map.Entry<String,Integer> entry;
  7. Person.Animal<String> animal;
  8. String str = new String();
  9. T t;
  10. }
Person类
  1. public class Person {
  2. @Override
  3. public String toString() {
  4. return "Person []";
  5. }
  6. class Animal <T> {
  7. public String name;
  8. }
  9. }
TypeVariableTest类
  1. public class TypeVariableTest {
  2. public static void main(String[] args) {
  3. Field[] declaredFields = TypeVariableBean.class.getDeclaredFields();
  4. for (Field field : declaredFields) {
  5. field.setAccessible(true);
  6. Type type = field.getGenericType();
  7. System.out.println("field.getGenericType() instanceof TypeVariable ? ------ "+(type instanceof TypeVariable));
  8. if(field.getGenericType() instanceof TypeVariable){
  9. Type[] bounds = ((TypeVariable) type).getBounds();
  10. int i = 0;
  11. for (Type type2 : bounds) {
  12. System.out.println("------------"+i);
  13. System.out.println("上边界是:"+type2.getTypeName());
  14. System.out.println("------------"+i);
  15. i++;
  16. }
  17. GenericDeclaration genericDeclaration = ((TypeVariable) type).getGenericDeclaration();
  18. System.out.println("TypeeVariable's Name::::"+((TypeVariable) type).getName());
  19. System.out.println(genericDeclaration);
  20. }
  21. }
  22. }
  23. }


此时我们运行TypeVariableTest类时。得到的结果是:
  1. field.getGenericType() instanceof TypeVariable ? ------ false
  2. field.getGenericType() instanceof TypeVariable ? ------ false
  3. field.getGenericType() instanceof TypeVariable ? ------ false
  4. field.getGenericType() instanceof TypeVariable ? ------ false
  5. field.getGenericType() instanceof TypeVariable ? ------ false
  6. field.getGenericType() instanceof TypeVariable ? ------ false
  7. field.getGenericType() instanceof TypeVariable ? ------ false
  8. field.getGenericType() instanceof TypeVariable ? ------ true
  9. ------------0
  10. 上边界是:java.lang.Object
  11. ------------0
  12. TypeeVariable's Name::::T
  13. class TypeVariableBean
我们可以看出,只有最后一个是我们自己在类上定义的泛型时才是TypeVariable。此时的上边界是Object,因为我们没有显式的定义其上边界,现在我们改变一下TypeVariableBean这个类的泛型上边界。
更改后的TypeVariableBean类
  1. public class TypeVariableBean<T extends Person & Serializable> {
  2. public List<String> list;
  3. Class<?> clz;
  4. private Set<String>[] set;
  5. private List noGerList;
  6. Map.Entry<String,Integer> entry;
  7. Person.Animal<String> animal;
  8. String str = new String();
  9. T t;
  10. }
这时我们运行的结果如下
  1. field.getGenericType() instanceof TypeVariable ? ------ false
  2. field.getGenericType() instanceof TypeVariable ? ------ false
  3. field.getGenericType() instanceof TypeVariable ? ------ false
  4. field.getGenericType() instanceof TypeVariable ? ------ false
  5. field.getGenericType() instanceof TypeVariable ? ------ false
  6. field.getGenericType() instanceof TypeVariable ? ------ false
  7. field.getGenericType() instanceof TypeVariable ? ------ false
  8. field.getGenericType() instanceof TypeVariable ? ------ true
  9. ------------0
  10. 上边界是:Person
  11. ------------0
  12. ------------1
  13. 上边界是:java.io.Serializable
  14. ------------1
  15. TypeeVariable's Name::::T
  16. class TypeVariableBean
这时就出现了两个上边界。

GenericArrayType(泛型数组类型)的作用

顾名思义,只有是带泛型的,并且是数组的那就属于GenericArrayType的范畴。
GenericArrayType的主要方法:
  1. Type getGenericComponentType()
  2. 返回表示此数组的组件类型的 Type 对象。
示例三:
有四个类 Person ,PersonInterface,GenericArrayTypeBean,GenericArrayTypeTest
Person类
  1. public class Person {
  2. @Override
  3. public String toString() {
  4. return "Person []";
  5. }
  6. class Animal <T> {
  7. public String name;
  8. }
  9. }


PersonInterface类
  1. public interface PersonInterface {
  2. }
GenericArrayTypeBean类
  1. public class GenericArrayTypeTest {
  2. public static void main(String[] args) {
  3. Field[] fields = GenericArrayTypeBean.class.getDeclaredFields();
  4. int i =1;
  5. for (Field field : fields) {
  6. Type type = field.getGenericType();
  7. System.out.println("----------"+i);
  8. if(type instanceof ParameterizedType){
  9. System.out.println(type.getTypeName());
  10. System.out.println("field.getGenericType() instanceof ParameterizedType::");
  11. }else if(type instanceof TypeVariable){
  12. System.out.println(type.getTypeName());
  13. System.out.println("field.getGenericType() instanceof TypeVariable::");
  14. }else if(type instanceof GenericArrayType){
  15. System.out.println(type.getTypeName());
  16. System.out.println("field.getGenericType() instanceof GenericArrayType::");
  17. Type genericComponentType = ((GenericArrayType) type).getGenericComponentType();
  18. System.out.println(type.getTypeName()+"数组的组成为:"+genericComponentType.getTypeName());
  19. }else if(type instanceof Class){
  20. System.out.println(type.getTypeName());
  21. System.out.println("field.getGenericType() instanceof Class::");
  22. }else{
  23. System.out.println(type.getTypeName()+" instanceof "+type.getClass());
  24. }
  25. System.out.println("----------"+i);
  26. i++;
  27. }
  28. }
  29. }
运行GenericArrayTypeTest类的结果为:
  1. ----------1
  2. java.util.List<Person>[]
  3. field.getGenericType() instanceof GenericArrayType::
  4. java.util.List<Person>[]数组的组成为:java.util.List<Person>
  5. ----------1
  6. ----------2
  7. java.util.Set<K>
  8. field.getGenericType() instanceof ParameterizedType::
  9. ----------2
  10. ----------3
  11. java.util.Map<K, V>
  12. field.getGenericType() instanceof ParameterizedType::
  13. ----------3
  14. ----------4
  15. java.util.List<Person>
  16. field.getGenericType() instanceof ParameterizedType::
  17. ----------4
  18. ----------5
  19. K
  20. field.getGenericType() instanceof TypeVariable::
  21. ----------5
  22. ----------6
  23. K[]
  24. field.getGenericType() instanceof GenericArrayType::
  25. K[]数组的组成为:K
  26. ----------6
  27. ----------7
  28. Person
  29. field.getGenericType() instanceof Class::
  30. ----------7
  31. ----------8
  32. java.lang.String
  33. field.getGenericType() instanceof Class::
  34. ----------8
  35. ----------9
  36. PersonInterface
  37. field.getGenericType() instanceof Class::
  38. ----------9
由此我们可以看出只要是带泛型,并且是数组的就属于GenericArrayType。并且getGenericComponentType方法就是获得该数组的组成类型。

WildcardType(通配符类型)的作用

表示通配符类型参数。

WildcardType是依托于ParameterizedType和GenericArrayTypeTest而存在的。

示例如下:

  1. Class<?>
  2. List<? extends Number>
  3. Set<? super T>
WildcardType的主要方法
  1. Type[] getLowerBounds()
  2. 返回表示此类型变量下边界的 Type 对象的数组。
  3. Type[] getUpperBounds()
  4. 返回表示此类型变量上边界的 Type 对象的数组。


这个类型比较好理解,直接上例子
示例四:WildcardTypeBean,WildcardTypeTest
WildcardTypeBean类
  1. public class WildcardTypeBean<K extends Number & Serializable,V> {
  2. List<? extends Person>[] list;
  3. Set<? super Man> set;
  4. K k;
  5. }
WildcardTypeTest类
  1. public class WildcardTypeTest {
  2. public static void main(String[] args) throws Exception{
  3. Field[] fields = WildcardTypeBean.class.getDeclaredFields();
  4. for (int i = 0; i <fields.length; i++) {
  5. System.out.println("--------------"+(i+1));
  6. Field field = fields[i];
  7. System.out.println("file:"+field);
  8. Type type = field.getGenericType();
  9. if(type instanceof GenericArrayType){
  10. GenericArrayType gat = (GenericArrayType)type;
  11. ParameterizedType genericComponentType = (ParameterizedType)gat.getGenericComponentType();
  12. Type[] actualTypeArguments = genericComponentType.getActualTypeArguments();
  13. WildcardType t = (WildcardType)actualTypeArguments[0];
  14. Type[] upperBounds = t.getUpperBounds();
  15. for (Type type2 : upperBounds) {
  16. System.out.println("upperBounds:"+type2.getTypeName());
  17. }
  18. Type[] lowerBounds = t.getLowerBounds();
  19. for (Type type2 : lowerBounds) {
  20. System.out.println("lowerBounds:"+type2.getTypeName());
  21. }
  22. }else if(type instanceof ParameterizedType){
  23. WildcardType wildcardType = ((WildcardType)((ParameterizedType) type).getActualTypeArguments()[0]);
  24. Type[] lowerBounds = wildcardType.getLowerBounds();
  25. for (Type type2 : lowerBounds) {
  26. System.out.println("lowerBounds:"+type2.getTypeName());
  27. }
  28. }else{
  29. System.out.println(type.getTypeName()+" instanceof "+type.getClass());
  30. }
  31. System.out.println("--------------"+(i+1));
  32. }
  33. }


运行结果:
  1. --------------1
  2. file:java.util.List[] WildcardTypeBean.list
  3. upperBounds:Person
  4. --------------1
  5. --------------2
  6. file:java.util.Set WildcardTypeBean.set
  7. lowerBounds:Man
  8. --------------2
  9. --------------3
  10. file:java.lang.Number WildcardTypeBean.k
  11. K instanceof class sun.reflect.generics.reflectiveObjects.TypeVariableImpl
  12. --------------3
到此,Type的四个子接口就基本介绍完毕了。如果有错误的地方,欢迎各位大牛在评论区指出!!!








































6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server.服务器版本: Apache Tomcat/9.0.46 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 服务器构建: May 8 2021 17:35:52 UTC 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 服务器版本号: 9.0.46.0 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 操作系统名称: Windows 10 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS.版本: 10.0 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 架构: amd64 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java 环境变量: C:\Program Files\Java\jdk-17 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java虚拟机版本: 17.0.15+9-LTS-241 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM.供应商: Oracle Corporation 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_BASE: D:\myeclipse\add\.metadata\.me_tcat9046 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_HOME: D:\myeclipse\plugins\com.genuitec.eclipse.server.embedded.tomcat.v90.core_13.0.0.v202405290550-me\tomcat9046 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dcatalina.base=D:\myeclipse\add\.metadata\.me_tcat9046 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dcatalina.home=D:\myeclipse\plugins\com.genuitec.eclipse.server.embedded.tomcat.v90.core_13.0.0.v202405290550-me\tomcat9046 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dwtp.deploy=D:\myeclipse\add\.metadata\.me_tcat9046\webapps 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Djava.library.path=C:\Program Files\Java\jdk-17\bin;D:\myeclipse\plugins\com.genuitec.eclipse.server.embedded.tomcat.v90.core_13.0.0.v202405290550-me\tomcat9046\bin 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dfile.encoding=UTF-8 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dstdout.encoding=UTF-8 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -Dstderr.encoding=UTF-8 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: 命令行参数: -XX:+ShowCodeDetailsInExceptionMessages 6月 29, 2025 8:01:40 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: 在java.library.path:[C:\Program Files\Java\jdk-17\bin;D:\myeclipse\plugins\com.genuitec.eclipse.server.embedded.tomcat.v90.core_13.0.0.v202405290550-me\tomcat9046\bin]上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中获得最佳性能 6月 29, 2025 8:01:40 下午 org.apache.coyote.AbstractProtocol init 信息: 初始化协议处理器 ["http-nio-8080"] 6月 29, 2025 8:01:40 下午 org.apache.coyote.AbstractProtocol init 信息: 初始化协议处理器 ["https-jsse-nio-8443"] 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.Catalina load 信息: 服务器在[787]毫秒内初始化 6月 29, 2025 8:01:40 下午 org.apache.catalina.core.StandardService startInternal 信息: 正在启动服务[Catalina] 6月 29, 2025 8:01:40 下午 org.apache.catalina.core.StandardEngine startInternal 信息: 正在启动 Servlet 引擎:[Apache Tomcat/9.0.46] 6月 29, 2025 8:01:40 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: 把web 应用程序部署到目录 [D:\myeclipse\add\.metadata\.me_tcat9046\webapps\docs] 6月 29, 2025 8:01:42 下午 org.apache.jasper.servlet.TldScanner scanJars 信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Web应用程序目录[D:\myeclipse\add\.metadata\.me_tcat9046\webapps\docs]的部署已在[1,650]毫秒内完成 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: 把web 应用程序部署到目录 [D:\myeclipse\add\.metadata\.me_tcat9046\webapps\examples] 6月 29, 2025 8:01:42 下午 org.apache.catalina.core.ApplicationContext log 信息: ContextListener: contextInitialized() 6月 29, 2025 8:01:42 下午 org.apache.catalina.core.ApplicationContext log 信息: SessionListener: contextInitialized() 6月 29, 2025 8:01:42 下午 org.apache.catalina.core.ApplicationContext log 信息: ContextListener: attributeAdded(&#39;StockTicker&#39;, &#39;async.Stockticker@1eeb9e5c&#39;) 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Web应用程序目录[D:\myeclipse\add\.metadata\.me_tcat9046\webapps\examples]的部署已在[281]毫秒内完成 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: 把web 应用程序部署到目录 [D:\myeclipse\add\.metadata\.me_tcat9046\webapps\host-manager] 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Web应用程序目录[D:\myeclipse\add\.metadata\.me_tcat9046\webapps\host-manager]的部署已在[27]毫秒内完成 6月 29, 2025 8:01:42 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: 把web 应用程序部署到目录 [D:\myeclipse\add\.metadata\.me_tcat9046\webapps\KuCun2] 6月 29, 2025 8:01:46 下午 org.apache.jasper.servlet.TldScanner scanJars 信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。 6月 29, 2025 8:01:46 下午 org.apache.catalina.core.ApplicationContext log 信息: 2 Spring WebApplicationInitializers detected on classpath . ____ _ __ _ _ /\\ / ___&#39;_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | &#39;_ | &#39;_| | &#39;_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) &#39; |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.12.RELEASE) 2025-06-29 20:01:46.968 INFO 15500 --- [ main] com.kucun.DemoApplication : Starting DemoApplication v0.0.1-SNAPSHOT on DESKTOP-MN1QJ5M with PID 15500 (D:\myeclipse\add\.metadata\.me_tcat9046\webapps\KuCun2\WEB-INF\classes started by Admin in D:\myeclipse) 2025-06-29 20:01:46.973 INFO 15500 --- [ main] com.kucun.DemoApplication : No active profile set, falling back to default profiles: default 2025-06-29 20:01:47.836 INFO 15500 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-06-29 20:01:47.997 INFO 15500 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 147ms. Found 13 JPA repository interfaces. 2025-06-29 20:01:48.447 INFO 15500 --- [ main] o.a.c.c.C.[.[localhost].[/KuCun2] : Initializing Spring embedded WebApplicationContext 2025-06-29 20:01:48.447 INFO 15500 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1435 ms 2025-06-29 20:01:48.937 INFO 15500 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2025-06-29 20:01:49.055 INFO 15500 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.32.Final 2025-06-29 20:01:49.335 INFO 15500 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2025-06-29 20:01:49.560 INFO 15500 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-06-29 20:01:49.940 INFO 15500 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-06-29 20:01:49.972 INFO 15500 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect 2025-06-29 20:01:51.794 INFO 15500 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2025-06-29 20:01:51.809 INFO 15500 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit &#39;default&#39; 2025-06-29 20:01:52.747 WARN 15500 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &#39;appService&#39;: Unsatisfied dependency expressed through field &#39;repositoryService&#39;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;dynamicRepositoryService&#39;: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;customRepository&#39; defined in com.kucun.dataDo.CustomRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object 2025-06-29 20:01:52.748 INFO 15500 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit &#39;default&#39; 2025-06-29 20:01:52.750 INFO 15500 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2025-06-29 20:01:52.766 INFO 15500 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2025-06-29 20:01:52.773 INFO 15500 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with &#39;debug&#39; enabled. 2025-06-29 20:01:52.807 ERROR 15500 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name &#39;appService&#39;: Unsatisfied dependency expressed through field &#39;repositoryService&#39;; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;dynamicRepositoryService&#39;: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;customRepository&#39; defined in com.kucun.dataDo.CustomRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1425) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:173) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:153) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:95) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172) ~[spring-web-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:9.0.46] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717) ~[catalina.jar:9.0.46] at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690) ~[catalina.jar:9.0.46] at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:692) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1184) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1925) ~[catalina.jar:9.0.46] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-util.jar:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) ~[na:na] at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1094) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:476) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:319) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) ~[catalina.jar:9.0.46] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936) ~[catalina.jar:9.0.46] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:829) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384) ~[catalina.jar:9.0.46] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374) ~[catalina.jar:9.0.46] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-util.jar:9.0.46] at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[na:na] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909) ~[catalina.jar:9.0.46] at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:9.0.46] at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:9.0.46] at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930) ~[catalina.jar:9.0.46] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:9.0.46] at org.apache.catalina.startup.Catalina.start(Catalina.java:772) ~[catalina.jar:9.0.46] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342) ~[bootstrap.jar:9.0.46] at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) ~[bootstrap.jar:9.0.46] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;dynamicRepositoryService&#39;: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;customRepository&#39; defined in com.kucun.dataDo.CustomRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:415) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1791) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] ... 62 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;customRepository&#39; defined in com.kucun.dataDo.CustomRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1799) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:624) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:612) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1243) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE] at com.kucun.Service.DynamicRepositoryService.init(DynamicRepositoryService.java:37) ~[classes/:0.0.1-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] ... 74 common frames omitted Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object at org.hibernate.metamodel.internal.MetamodelImpl.managedType(MetamodelImpl.java:582) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at org.hibernate.metamodel.internal.MetamodelImpl.managedType(MetamodelImpl.java:85) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:75) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:66) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:229) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:179) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:162) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:72) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:310) ~[spring-data-commons-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$4(RepositoryFactoryBeanSupport.java:294) ~[spring-data-commons-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.util.Lazy.getNullable(Lazy.java:211) ~[spring-data-commons-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.util.Lazy.get(Lazy.java:95) ~[spring-data-commons-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:300) ~[spring-data-commons-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:144) ~[spring-data-jpa-2.3.9.RELEASE.jar:2.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1858) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1795) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] ... 91 common frames omitted List<Kucun> findByLastUpdatedAfter(Date date);
最新发布
06-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值