AnnotatedElementUtils.findMergedAnnotation

关于MongoDB,有一个核心操作类:MongoTemplate,使用这个MongoDB模板类可以很方便的对MongoDB数据进行CRUD操作,而这个类位于spring-data-mongodb这个jar包下,所以在使用maven进行web开发时,我们需要在pom.xml下引入依赖。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>
	
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.8.0</version>
</dependency>

在操作过程中,老是出现如下错误:

java.lang.NoSuchMethodError:org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)

起初,以为是MongoDB的配置出了问题,但是经过调试,发现mongo-config.xml文件是没有问题的。

由于项目使用了spring框架,所以pom.xml文件引入了很多依赖,初步判断是依赖版本冲突导致,但是却无从下手。

经过度娘,了解到了spring-context (<spring.version>4.1.6.RELEASE</spring.version>)中会有spring-expression的版本信息

但是,在spring-data-mongodb 2.0.8.RELEASE的版本中也存在了spring-expression的版本信息,于是乎,这两者便产生了冲突

找到了问题所在,接下来便是解决问题了。

方法一:把    <artifactId>spring-data-mongodb</artifactId>
                      <version>2.0.8.RELEASE</version>
              换成 <artifactId>spring-data-mongodb</artifactId>
                        <version>1.4.2.RELEASE</version>
             也即是把 spring-data-mongodb 换成较低的 1.4.2.RELEASE 版本

方法二:  有网友说,在 spring-data-mongodb 依赖中去除 spring-expression 的版本信息,但是,此种方法在spring-data-mongodb的版本为2.0.8.RELEASE还是会不能解决问题,我在想,是不是2.0.8版本太高,其中不止spring-expression存在冲突,还有其它的spring包冲突

至此,使用第一种方法,解决折腾了一个上午的版本信息冲突问题,所以说程序猿的时间都去哪里了呢!!

另外,虽然说spring等一些主流框架会给我们带来开发上极大的便利了,但是有一些极细节的坑却是很多人都会不经意就会猜到,就像是上面的版本信息问题,相信很多人都遇到过

 

AnnotationUtils是Spring框架提供的一个工具类,用于获取指定类、方法、字段等上指定的注解信息。使用AnnotationUtils可以简化代码编写,并且可以避免出现重复的注解代码。 下面是AnnotationUtils的使用示例: 1. 获取指定类上的注解信息: ``` @MyAnnotation(value = "class") public class MyClass { // ... } Class<?> clazz = MyClass.class; MyAnnotation annotation = AnnotationUtils.getAnnotation(clazz, MyAnnotation.class); System.out.println(annotation.value()); // 输出 "class" ``` 2. 获取指定方法上的注解信息: ``` public class MyClass { @MyAnnotation(value = "method") public void myMethod() { // ... } } Method method = MyClass.class.getMethod("myMethod"); MyAnnotation annotation = AnnotationUtils.getAnnotation(method, MyAnnotation.class); System.out.println(annotation.value()); // 输出 "method" ``` 3. 获取指定字段上的注解信息: ``` public class MyClass { @MyAnnotation(value = "field") private String myField; // ... } Field field = MyClass.class.getDeclaredField("myField"); MyAnnotation annotation = AnnotationUtils.getAnnotation(field, MyAnnotation.class); System.out.println(annotation.value()); // 输出 "field" ``` 注意事项: - 如果指定的类、方法、字段上没有指定的注解,则AnnotationUtils.getAnnotation()方法会返回null。 - 如果需要获取指定类上的注解信息,也可以使用Spring提供的@AnnotatedElementUtils工具类,该工具类可以获取类、方法、字段等上所有的注解信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值