Java注解[内置系统注解与Spring中常见注解]
来源:互联网 发布:excel单元格内换行 mac 编辑:程序博客网 时间:2024/05/17 03:16
注解(Annotation),也叫元数据。是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
注解可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解以“@注解名”在代码中存在,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据(用来描述数据的数据)的访问。另外,还可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件、或者运行时中出现。
1.内置系统注解
Java语言自带了一系列的注解,其中有一些被称为Meta注解,又叫做元注解。
1.1元注解
位置:java.lang.annotation
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其他annotation类型作说明。Java5.0定义的元注解:
@Target@Retention@Documented@Inherite
@Target用于限制某个元素可以被注解的类型。如:
–ANNOTATION_TYPE表示该注解可以应用到其他注解上;
–CONSTRUCTOR表示可以使用到构造器上;
–FIELD表示可以使用到域或属性上;
–LOCAL_VARIABLE表示可以使用到局部变量上;
–METHOD表示可以使用到方法级别的注解上;
–PARAMETER表示可以使用到方法的参数上;
–PACKAGE表示可以使用到包声明上;
–TYPE表示可以使用到一个类的任何元素上。
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用该meta-Annotation可以对Annotation的“声明周期”限制。
@Documented用于描述其他类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。
当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。
1.2基本注解
位置:java.lang
Java中提供了3种基本注解:
@Override @Deprecated @SuppressWarnings
@Override 告诉编译器,这个方法时一个重写的方法(描述方法的元数据),如果父类中不存在该方法,编译器就会报错,提示该方法没有重写父类中的方法。当子类方法的参数和父类不匹配,或返回值类型不同时也会提示我们错误。
@Deprecated 说明被标记的元素不应该再度使用。这个注解会让编译器产生警告消息。可以使用到方法,类和域上。相应的解释和原因,包括另一个可取代的方法应该同时和这个注解使用。
@SuppressWarnings 这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。
2.Spring常见注解
在Spring中,我们可以使用注解配置来构造IOC容器。在applicationContext.xml中注册:
<context:component-scan base-package="package">
表明package包及其子包中,如果某个类的头像带有特定的注解:
@Component@Controller@Service@Repository
就会将这个对象作为Bean注册金Spring容器,也可以在标签中指定多个包,使用“,”分隔。
@Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
@Controller对应控制层的Bean,也就是Action。
@Controller@Scope("prototype")public class UserAction{ …}
使用@Controller注解标识Action之后,就表示要把Action交给Spring容器管理,在Spring容器中会存在一个名字为”Action”的action,这个名字是根据Action类名来取的。
@Controller不指定其value(@Controller),则默认的bean名字为这个类的类名首字母小写,如果指定value(@Controller(value=”UserAction”))或者(@Controller(“UserAction”)),则使用value作为bean的名字。
@Service对应的是业务层Bean。
@Service("userService")public class UserServiceImpl implements UserService { …}
@Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做”userService”,这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的”userService”,然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的”userService”即可。
注意:在Action声明的“userService”变量的类型必须是“UserServiceImpl”或者是其父类“UserService”,否则由于类型不一致而无法注入。
@ Repository对应数据访问层Bean。
@Repository("userDao")public class UserDaoImpl implements UserDao{ …}
@Repository(“userDao”)注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。
当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name=”userDao”)注解告诉Spring,Spring把创建好的userDao注入给Service即可。
- Java注解[内置系统注解与Spring中常见注解]
- Java内置系统注解和元注解
- java中常见注解
- Java_注解 (元注解 / Java内置注解 / Android内置注解)
- Java Spring 常见注解汇总
- Java中常见的注解
- java注解:java中常见的第三方注解,自定义注解以及元注解
- Spring常见注解
- Spring 常见注解
- Spring常见注解解释
- Spring常见注解
- spring mvc 小记(一):spring注解与java原注解
- Spring应用中常见的bean注解
- Spring常见注解及注解注入
- spring中自定义注解(annotation)与AOP中获取注解
- Spring中自定义注解与AOP中获取注解
- spring中自定义注解(annotation)与AOP中获取注解
- Java中的常见注解
- python---post请求数据包,正常模拟登录,图片验证码未自动化,phtesseract
- iOS开发网络篇 一一 网络的基本概念
- JAVA学习笔记21——SpingMVC框架第一章
- [mysql]MySQL修改账号密码的3种方法
- 初学Andrioid
- Java注解[内置系统注解与Spring中常见注解]
- Extra Long Factorials
- Java HotSpot VM内存管理白皮书
- STM32F4四路ADC采样问题探讨
- android mvp开发模式
- 面向组件编程之Unity 11.Quaternion类属性 线性插值Lerp() 关键字:按键控制游戏物体朝向
- 学生系统总结(思路篇)
- android播放音频文件
- PHP实现常见算法之二河内之塔