今天在网上看东西,发现解释注解的文章都不全,各个方面的都有,然后我就想把这些总结一下,也方便自己下次查看:
一:注解的定义
注解(Annontation)是Java5开始引入的新特征。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。注解(Annontation)像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。
二:注解的用途
1、生成文档。
2、跟踪代码依赖性,实现替代配置文件功能。
3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
三:注解的原理
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationlnvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。
四:常用的注解
1. @Controller:标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象
2. @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
3. @Service:用来装配bean,主要用于标注业务层组件,通过注解的方式将该类加入到spring 中进行管理。
4. @Autowired:用来装配bean,可以写在字段上,也可以写在方法上。默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)。
5. @RequestMapping:类定义处:提供初步的请求映射信息,相对于 WEB 应用的根目录。方法处:提供进一步的细分映射信息,相对于类定义处的 URL。
6. @RequestParam:用于将请求参数区数据映射到功能处理方法的参数上。
这些都算是比较常用的注解,还有一些实例和没怎么常用的可以在链接里查看。
https://blog.csdn.net/raoifeng/article/details/83757391