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即可。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝卖家发货选错在线下单怎么办 申请退款后卖家又虚假发货了怎么办 公司用淘宝没发票做账怎么办 淘宝网买了假货确认了怎么办? 吃了安眠药睡了一天还没有醒怎么办 淘宝买的东西退货快递弄丢了怎么办 在淘宝上已付钱店家说没货了怎么办 从淘宝物流寄东西到国外被扣怎么办 不是天猫的淘宝卖家不发货怎么办 微店违规说卖假冒商品怎么办 云集微店的商品没货了怎么办 淘宝买家被检测有虚拟交易怎么办 媒体声音突然没有声音了该怎么办 华为微信运动步数为零怎么办 淘宝店铺没货了客户拍了怎么办 房子涨价了卖家反悔不卖了怎么办 买的东西很贵质量不好怎么办 在淘宝开的店账号忘了怎么办 建了个淘宝优惠券群没人购物怎么办 刚开的淘宝店没有生意怎么办 房产代理公司不给渠道结佣金怎么办 天猫超过72小时不发货怎么办 流量魔盒苹果下载怎么打不开怎么办 淘宝包邮店铺新疆地区拍怎么办 淘宝客服当顾客要优惠时怎么办 微信手机号注册的找不到了怎么办 之前注册的微信找不到了怎么办 苹果ipad的id密码忘了怎么办 淘宝和支付宝用一张银行卡怎么办 淘宝卖家填写虚假物流信息怎么办 淘宝店铺的浏览量越来越少怎么办 网上充手机话费充错了怎么办 夜神模拟器上陌陌的位置不对怎么办 如果在大庭广众之下放了个屁怎么办 淘宝分销上传宝贝被系统下架怎么办 酷狗喜欢歌单里面的歌都没了怎么办 苹果手机下载不了微信缓冲怎么办 登陆微信提示版本过低登不了怎么办 苹果手机微信版本过低登不上怎么办 微信小程序显示微信版本过低怎么办 三星手机登微信显示版本过低怎么办