注解
来源:互联网 发布:mac装好windows没wifi 编辑:程序博客网 时间:2024/06/02 01:58
原来一直认为注解的作用就是为了提高代码的阅读性。
其实不然,如Xdoclet可以快速的生成程序的配置文件。
这个是struts的一个例子:
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;/** * Simple class to test Jakarta Struts generation (Jakarta Struts 1.2 beta 2 only). * * @struts.action * path="/struts/foo" * * @struts.action-forward * name="success" * path="/struts/getAll.do" * redirect="false" */public final class StrutsAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { return mapping.findForward("success"); }}
执行完后会生成一个struts-config配置文件:
<!-- ========== Action Mapping Definitions =================================== --> <action-mappings> <action path="/struts/foo" type="test.web.StrutsAction" unknown="false" validate="true" > <forward name="success" path="/struts/getAll.do" redirect="false" /> </action>
试想想,struts的配置文件一大堆,需要大量的手工操作。而如果写代码的时候将相关的元数据信息写在注释里。Xdoclet自动完成这些任务。将大大提高工作效率。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JDK5.0注解可以看成是Javadoc标签和Xdoclet的延伸和发展。
它可以自定义标签,通过java的反射机制来获取注解的信息,来完成某些工作。
基本原则:注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过Java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
简单的注解例子:
package com.boventech.learning.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME) //①声明注解的保留期限@Target(ElementType.METHOD)//②声明可以使用该注解的目标类型public @interface NeedTest {//③定义注解boolean value() default true;//④声明注解成员}
package com.boventech.learning.annotation;public class ForumService { @NeedTest(value=true) //①public void deleteForum(int forumId){System.out.println("删除论坛模块:"+forumId);} @NeedTest(value=false) //② public void deleteTopic(int postId){System.out.println("删除论坛主题:"+postId);}}
package com.boventech.learning.annotation;import java.lang.reflect.Method;public class TestTool {public static void main(String[] args) { //①得到ForumService对应的Class对象Class clazz = ForumService.class; //②得到ForumSerivce对应的Method数组Method[] methods = clazz.getDeclaredMethods(); System.out.println(methods.length);for (Method method : methods) { //③获取方法上所标注的注解对象NeedTest nt = method.getAnnotation(NeedTest. class);if (nt != null) {if (nt.value()) {System.out.println(method.getName() + "()需要测试");} else {System.out.println(method.getName() + "()不需要测试");}}}}}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
输出结果:
2
deleteTopic()不需要测试
deleteForum()需要测试
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解
- 注解。
- 注解
- 注解
- 注解
- 注解
- android:LruCache缓存小结
- HDU Rightmost Digit
- java 向上转型(upcasting)和向下转型(downcasting)区别举例详解
- C_HelloLinux
- githubz在add ssh key报错 Key is invalid. Ensure you've copied the file correctly 解决办法
- 注解
- Java线程范围内的共享数据(2)
- SAP连接数据库
- stack link
- Codility上的练习(12)
- 关于开源框架GPUImage 的简单说明
- VB中With
- NSAutoreleasePool与autorelease 详解(一)
- Git常用基础命令总结