元注解小结

JDK5及其以后的JDK版本开始支持Java注解;Java注解也叫做元数据。

Java除本身自带的注解外该可以自定义自己需要的注解,并且Java提供了四个用于修饰自定义注解元注解@Target、@Retention @Documented 和 @Inherited 

@Target

该元注解的作用是控制自定义注解的作用位置,即用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元素有以下几种属性值:

  1. ElementType.ANNOTATION_TYPE:应用于其他注解的元注解
  2. ElementType.CONSTRUCTOR:应用于构造函数
  3. ElementType.FIELD:应用于全局属性
  4. ElementType.LOCAL_VARIABLE:应用于方法中的本地变量
  5. ElementType.METHOD:应用于方法
  6. ElementType.PACKAGE:应用于包
  7. ElementType.PARAMETER:应用于方法的参数
  8. ElementType.TYPE:应用于类、接口或者枚举声明

注意:3、5、7、8字体加深的部分是比较常用且重要的属性值;我们以8中 ElementType.TYPE 为例:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
public @interface Service {
	String value() default "";
	int version() default 1;
}

自定义一个注解叫 Service(不是Spring中Service注解,这里没引jar包,仅是自定义注解),然后设置属性 ElementType.TYPE ;我们就可以用来注解类了;

@Service(value="",version=1)
public class Test {
	
}

@Retention

用来控制注解保存到什么时候,就是控制注解存在于Java源码在编译和翻译的哪些过程;有以下几种属性:

  • RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。
  • RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;
  • RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;
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.TYPE)
public @interface Service {
	String value() default "";
	int version() default 1;
}

对Service自定义注解稍作修改。添加 @Retention 注解并设置 RetentionPolicy.RUNTIME 属性;

@Service(value="",version=1)
public class Test {
	
	public static void main(String[] args) {
		Class clazz = Test.class;
		Object object = clazz.getAnnotation(Service.class);
		System.out.println(object);
	}
}


//输出语句
@zhujie.Service(value=, version=1)

然后我们获取Test类的Service注释并输出会得到如上结果,如果我们设置的属性是 RetentionPolicy.SOURCE  RetentionPolicy.CLASS,我们什么都得不到,输出结果为null,因为这些属性的设置,注解是保存不到运行时的。

@Documented 和 @Inherited 

@Documented  执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中;

@Inherited :如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

这两个注解相对来说不太重要,也是比较简单的,不再举例,可自行探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`@RequestMapping`是Spring MVC框架中的一个重要注解,用于将HTTP请求映射到控制器的方法上。这个注解用于简化RESTful风格的Web服务开发,使得路由和处理逻辑更加清晰和模块化。下面是一些关于`@RequestMapping`实验小结的关键点: 1. **路径映射**:`@RequestMapping`用于指定一个或多个HTTP请求方法(GET, POST, PUT, DELETE等),以及对应的URL路径。例如,`@RequestMapping(value = "/users", method = RequestMethod.GET)`表示该方法处理所有发送到"/users"路径的GET请求。 2. **请求参数**:可以通过`@RequestParam`或`@PathVariable`注解处理请求参数,如查询参数、路径变量等。如`@RequestParam(name="id") Long userId`会从请求中获取名为"id"的查询参数。 3. **返回类型**:`@ResponseBody`可以用来标记返回值为JSON或XML响应体,而`@ModelAttribute`用于处理表单提交的模型属性。 4. **异常处理**:可以使用`@ExceptionHandler`注解来捕获特定的异常,并提供定制的错误处理。 5. **分组和扫描器**:为了方便管理,可以通过`@RequestMapping`的`@ControllerAdvice`或`@Controller`的`@RequestMapping(basePath = "/api/v1")`来对多个控制器进行分组或定义统一的路径前缀。 相关问题-- 1. `@RequestMapping`如何处理不同类型的HTTP请求? 2. 如何在Spring MVC中使用`@RequestParam`和`@PathVariable`? 3. `@ResponseBody`和`@ModelAttribute`的区别是什么? 4. 如何在Spring MVC中实现全局异常处理? 5. 分组和扫描器在Spring MVC中的应用场景是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值