引言:注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,使用方便,代码简洁。本文参考多篇优秀博客,主要介绍注解概念、内容、原理、分类以及自定义注解,覆盖注解的全部基础内容,力求一文读懂Java注解。
一、注解的概念及来源
注解是一种描述数据的数据,是源代码的元数据。通俗地讲,相当于对源代码打一个标签。举个例子,Java中一个经常见到的注解@Override。
@Override
public String toString() {
return "This is String Representation of current object.";
}
在上述代码中,@Override这个注解就是一个标签,告诉编译器这个方法是一个重写方法。当父类中不存在这个方法,编译器就知道这和标签不同,会报错,提示该方法没有重写父类的方法。
Java注解是在Java1.5版本引入,功能类似于XML,都是用于描述元数据。不同的是XML和代码是松耦合的,有时候可以完全分离,主要用于为应用设置很多常量和参数;而注解是紧耦合, 可以用于把某个方法声明为服务。
二、注解的分类及具体内容
1.按照来源
注解分为三类:Java自带注解、第三方的注解、自定义的注解。
(1)Java自带注解
名称 | 作用 | 备注 |
@Override | 表示覆盖或重写父类的方法。 | 当父类中不存在这个方法,编译器会报错,提示该方法没有重写父类的方法。 |
@Deprecated | 表示该方法已经过时了。 | 使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。 |
@Suppvisewarnings | 表示关闭不当编译器警告信息。 | 比如@Suppvisewarnings("Deprecation")。 |
(2)第三方的注解
框架 | 注解名称 | 作用 | 备注 |
Spring | @Autowired | 默认按类型装配 | 如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Autowired @Qualifier("personDaoBean") 存在多个实例配合使用。 |
@Service | 用于标注业务层组件 | @Service("serviceName")注解相当于applicationContext.xml配置文件中配置的<bean id="serviceName">,表示给当前类命名一个别名,方便注入到其他需要用到的类中。 | |
@Repository | 用于标注数据访问组件,即DAO组件。 | @Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。 | |
Mybatis | @InsertProvider | 用来在实体类的Mapper类里注解保存方法的SQL语句 | 通过SQL工厂类及对应的方法生产SQL语句,这种方法的好处在于,我们可以根据不同的需求生产出不同的SQL,适用性更好。 |
@UpdateProvider | 用来在实体类的Mapper类里注解修改方法的SQL语句 | 同类型的注解为@InsertProvider,@UpdateProvider,@DeleteProvider和@SelectProvider对应增删改查。 | |
@Options | 设置缓存时间,为对象生成自增的key | https://www.cnblogs.com/sonofelice/p/6250203.html 这个博客的使用实例写的很赞。 |
spring常用注解:https://www.cnblogs.com/xiaoxi/p/5935009.html
(3)自定义注解
在第三节用一个例子介绍自定义注解。
2.按照运行机制
注解分为三类:源码注解、编译时注解和运行时注解。
名称 | 特点 | 举例 |
源码注解 | 只在源码中存在,编译后不存在 | |
编译时注解 | 源码和编译后的class文件都存在 | @Override,@Deprecated,@SuppressWarnings |
运行时注解 | 能在程序运行时起作用,甚至会影响运行逻辑的注解 | 如spring的依赖注入 |
3.按照功能划分
还包括,元注解——注解的注解。
三、自定义注解
自定义注解的一个实现例子:https://blog.youkuaiyun.com/qq_27093465/article/details/52665189
参考:http://www.importnew.com/10294.html
https://www.cnblogs.com/Qian123/p/5256084.html