永发信息网

java注解如何自动触发?

答案:2  悬赏:50  手机版
解决时间 2021-03-04 13:01
  • 提问者网友:呐年旧曙光
  • 2021-03-03 19:15
例如:在PO中定义一个字段像这样
@validaterNum(max="10",min=5)
private String score;
然后有一个注解处理器
NumValidater{
//处理注解的值,验证失败抛出异常
void validateNum(String source,int max ,int min){
//dosomething

}

}

问题就是如何在我组装完成这个PO时,就自动触发我的注解处理器的验证方法,当验证不能通过时就自动抛出异常?
最佳答案
  • 五星知识达人网友:骨子里都是戏
  • 2021-03-03 20:46
没有自动触发一说, 总有那么一段程序都 把这些注解信息给提出来,然后跑它的功能。 只是说有些框架提供了这些功能,你不用自己去写了,只需要 配置就好了。 不同的框架是不一样的不能给我讲
全部回答
  • 1楼网友:慢性怪人
  • 2021-03-03 21:49
比如说在计划使用注释之前,比较一下当前情况下是不是注释真的比内迁代码和接口更为贴切。new aspects的john heintz在最近举行的no fluff just stuff(nfjs)俄亥俄州软件中心研讨会(coss)上作了一个演讲,讨论了向java注解添加行为的多种设计技术。 定义注解与定义接口的方式相似(使用@interface类型来声明注解)。注解不仅可以用在包级别上,也可以用在类成员(属性、方法、构造方法),甚至还可以用在方法的局部参数上。 保持策略(retention policy)是实现注解的重要一环,根据数据在内存中保持时间的长短,有三种类型的保持策略: runtime(一直保留数据,可以通过反射来访问)class(数据保留在字节码中,无法在运行时访问)source(编译器不保留该数据)一些流行框架如ejb3、hibernate、spring、seam、struts 2、rife及jax-ws的新版本都开始支持注解。john论述了处理注解的三种方式: 生成器:这种注解处理方式是通过读取源代码来产生新的源代码,或修改现存源代码及其它一些文件(xml、文档等等)来实现。生成器主要依赖于容器或其它编码约定,可以在任何保持策略下工作。 使用生成器的例子有注解处理工具(annotation processing tool,即apt)和处理器、xdoclet、spoon(针对java的扩展编译器)、apt-jelly(一个模板库)等。apt不允许你修改源代码,但对产生辅助文件却有相当大的帮助(像wsdl、文档)。 字节码转换:注解处理器对带有注解的类文件进行解析,然后对类做一些设当的修改。此外,他们也能生成其他类型的文件(比如xml配置文件)。字节码转换器在离线状态(编译期)、在装载期都能运行,还能在运行时动态运行(使用jvmti api)。在class或runtime这样的保持策略下,它都能运行。 使用字节码转换器的例子有aspectj、spring、hibernate、cglib、javassist、asm、bcel等。 运行时反射:这种方式使用反射api以编程的方式在运行阶段检查对象。它主要依赖于容器或其他编码约定,同时也需要runtime保持策略。 使用运行时反射的例子有:java 5及更新java版本中的反射、commons attributes。像junit和testng这样的测试框架也使用运行时反射来处理注解。 此外,john还提到了aspect processing的好处,如容易实现(需要好工具的支持)、语义细致——可以影响到方法调用,甚至是属性的访问(在这点上,和反射和apt不同),还能够集成多个类库的注解,并支持特定的领域抽象。他建议开发人员说,如果java代码可以以接口的方式实现,那就用接口,不要去用注解。他还建议大家不要对所有东西都使用注解,因为pojo(plain old java object)要比hajo(heavily annotated java object)好。在演讲中,他列举了其它一些最佳实践准则,比如: 注解要添加在最高层次的抽象上(比如在类和方法这两个层次上,注解要尽量添加在类上面)在面对规则的时候,尽量使用合适的默认值,而且只对exception添加注解。比外,还要尽量少用参数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯