gpt4 book ai didi

java - 从界面读取注解值?

转载 作者:行者123 更新时间:2023-11-29 05:29:38 25 4
gpt4 key购买 nike

我正在开发一个框架,允许开发人员通过服务层进行数据库操作。服务类将发送数据库请求 dto 对象,该对象将用 sql ID 注释以用作 MyBatis 中的 ID。后面会通过反射读取注解值。

首先,我创建了一个自定义注解界面。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyBatisMapper {
String namespace() default "";
String sqlId() default "";
}

以及数据库请求dto对象的接口(interface)。

public interface IReqDto {    
public String getDaoType();
}

数据库请求dto对象将实现上述IReqDto接口(interface)。

@MyBatisMapper(namespace="User", sqlId="userInsert")
public class UserInsertReqDto implements IReqDto{
//beans and getters/setters
}

上述 bean 可能会根据开发人员的要求而有所不同。这不是框架的一部分。开发人员必须在他使用的任何类型的数据库请求对象中实现 IReqDto 接口(interface)。

我正在尝试的是使用反射从数据库调用程序类中读取带注释的值(namespace 和 sqlId)。

我明白我可以通过这样做来获取注释值。

Class<UserInsertReqDto> ReqDto = UserInsertReqDto.class;        
for(Annotation annotation : ReqDto.getAnnotations()) {
System.out.println(annotation.toString());
}

但我的问题是,由于 UserInsertReqDto 会有所不同,我尝试对 IReqDto 接口(interface)使用反射。

Class<IReqDto> ReqDto = IReqDto.class;

嗯,这肯定行不通。问题是——在这种情况下如何从数据库请求对象中读取注释值?谢谢。

最佳答案

也许我仍然误解了你的问题,所以如有必要请纠正我。

您将获得一个 ReqDto 的自定义实现的对象

ReqDto object = ...; // get instance
Class<?> clazz = object.getClass(); get actual type of the instance

for(Annotation annotation : clazz.getAnnotations()) { // these are class annotations
System.out.println(annotation.toString());
}

MyBatisMapper mapperAnnotation = clazz.getAnnotation(MyBatisMapper.class);
if (mapperAnnotation != null) {
System.out.println(mapperAnnotation.namespace()
System.out.println(mapperAnnotation.sqlId()
}

关于java - 从界面读取注解值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21555556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com