Java 从接口读取注释值?
我正在开发一个框架,允许开发人员通过服务层进行数据库操作。服务类将向对象发送数据库请求dto,该对象将使用sql ID进行注释,以用作MyBatis中的ID。稍后我将通过反射读取注释值 首先,我创建了一个自定义注释接口Java 从接口读取注释值?,java,reflection,annotations,Java,Reflection,Annotations,我正在开发一个框架,允许开发人员通过服务层进行数据库操作。服务类将向对象发送数据库请求dto,该对象将使用sql ID进行注释,以用作MyBatis中的ID。稍后我将通过反射读取注释值 首先,我创建了一个自定义注释接口 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface MyBatisMapper { String namespace() default ""; Strin
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyBatisMapper {
String namespace() default "";
String sqlId() default "";
}
@MyBatisMapper(namespace="User", sqlId="userInsert")
public class UserInsertReqDto implements IReqDto{
//beans and getters/setters
}
Class<IReqDto> ReqDto = IReqDto.class;
和数据库请求dto对象的接口
public interface IReqDto {
public String getDaoType();
}
数据库请求dto对象,该对象将实现上述IReqDto接口
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyBatisMapper {
String namespace() default "";
String sqlId() default "";
}
@MyBatisMapper(namespace="User", sqlId="userInsert")
public class UserInsertReqDto implements IReqDto{
//beans and getters/setters
}
Class<IReqDto> ReqDto = IReqDto.class;
根据开发人员的要求,上述bean可能会有所不同。这不是框架的一部分。开发人员必须在他使用的任何类型的数据库请求对象中实现IReqDto
接口
我尝试的是使用反射从数据库调用器类读取带注释的值(名称空间和sqlId
)
我知道这样做可以得到带注释的值
Class<UserInsertReqDto> ReqDto = UserInsertReqDto.class;
for(Annotation annotation : ReqDto.getAnnotations()) {
System.out.println(annotation.toString());
}
嗯,肯定不行。
问题是-在这种情况下,如何从数据库请求对象读取带注释的值?谢谢。也许我还是误解了你的问题,如果有必要,请纠正我 您将获得
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());
}
反射的工作方式与类型无关。因此,不要引用具体的类,只需使用
Object#getClass()
和/或class
。例如
public Metadata getMetadata(Object pojo) {
Annotation annotation = pojo.getAnnotation(MyBatisMapper.class);
if (annotation == null) {
return null;
}
return new Metadata(annotation.getNamespcae(), annotation.getSqlId());
}
其中
Metadata
只是一个值类,您可以稍后使用它来包含有关对象的值。您还可以直接使用MyBatisWrapper注释。检查spring是如何工作的。您可以在框架中找到一些有用的方法。只有在存在注释的情况下才能获得注释UserInsertReqDto
已注释,IReqDto
未注释。“不清楚你在问什么。”SotiriosDelimanolis为这个未澄清的问题感到抱歉UserInsertReqDto
就是一个例子。只有当框架的用户创建它时,它才会存在。我必须在框架中准备获得实现IReqDto
的ReqDto
类的注释。谢谢您的时间,先生。只需修复注释变量的声明类型。和pojo.getClass().getAnnotation..