Java注解[内置系统注解与Spring中常见注解]

  注解(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即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值