1.创建注解需要使用元注解:
2.创建注解的语法:(1)@Target:指明创建的注解使用的范围(类,方法等),
比如@Target(ElementType.TYPE)
值有:
ANNOTATION_TYPE:注释类型声明
CONSTRUCTOR :构造方法声明
FIELD:字段声明(包括枚举常量)
LOCAL_VARIABLE : 局部变量声明
METHOD:方法声明
PACKAGE :包声明
PARAMETER:参数声明
TYPE :类、接口(包括注释类型)或枚举声明
(2)@Retention:定义注解被保留的时间
值有:
SOURCE:源文件保留
CLASS:在class文件中保留
RUNTIME:在运行时保留
比如:@Retention(RetentionPolicy.SOURCE)
(3)@Documented:是一个标识注解,用于说明是否把被修饰的注解添加到程序的API中
比如:@Documented
(4)@Inherited:是一个标识注解,注解是否被继承,如果一个类使用了@Inherited修饰的注解,那么该注解也将被该类的子类使用
在类中如下创建:
public@interface 注解名{
注解参数;
}
注解参数:
访问修饰符 参数类型 参数名称();
(1)访问修饰符:只能用public或者不写(default)
(2)参数类型:所有基本数据类型,String,Enum,Class,annotation
(3)参数名称:自定义,但是如果只有一个参数成员,一般都把该成员名设置为value
(4) 参数可以设置默认值:
比如String value()default “”;
public enum Color{RED,BLUE};
3.获取注解的参数值
在代码中获取注解的参数值:method.getAnnotation(注解类.class).value()
判断方法是否使用指定注解类:method.isAnnotationPresent(注解类.class)
如下为一个例子:
controller:(handler)处理请求的类
测试类:package com.controller; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class MyShow { @RequestMapping(value="myShow1") public void myShow1(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ List list = new ArrayList(); list.add("1"); list.add("2"); request.setAttribute("list", list); request.getRequestDispatcher("WEB-INF/jsp/index.jsp").forward(request, response); } @RequestMapping("myShow2") public ModelAndView myShow2(){ List list = new ArrayList(); list.add("3"); list.add("4"); //创建模型视图 ModelAndView mav = new ModelAndView(); //想模型视图填充数据 mav.addObject("list",list); //设置逻辑名 mav.setViewName("jsp/index"); return mav; } @RequestMapping("myShow3") public String myShow3(Model model){ List list = new ArrayList(); list.add("5"); list.add("6"); model.addAttribute("list", list); return "jsp/index"; } }
运行结果如下:package com.test; import java.lang.reflect.Method; import org.springframework.web.bind.annotation.RequestMapping; public class Test { public static void main(String[] args) throws ClassNotFoundException { Class c = Class.forName("com.controller.MyShow"); Method[] methods = c.getMethods(); for (Method method : methods) { if(method.isAnnotationPresent(RequestMapping.class)){ String[] str = method.getAnnotation(RequestMapping.class).value(); System.out.println(str[0]); } } } }
myShow1
myShow2
myShow3上面获取到了注解对应的参数值。