注解 (65)

1:所有注解都是类

2:所有注解类都默认是Annotation接口的子类。

3:定义方式:

public @interface SomeAnotation{

}

4:可以注解的位置

     类上

              方法上

              成员变量上。

              返回值上

              参数上

              局部变量

import org.junit.Test;
@MyTest
public class RunTest {
    @MyTest
    private int age;
    @MyTest()
    public void tt(@MyTest()int a){
        @MyTest
        int xx=0;
    }
}

5:如果定义了一个注解之后,没有说明这个注解可以注解的位置,则这个注解就可以注解在所有位置上

以下定义某个注解只可以注解到方法上:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
//设定注解可以注解的位置
@Target(value={ElementType.METHOD})
public @interface MyTest {

}

6:用途

6.1:在编译时起到限制的作用.

    public class MyServlet extends HttpServlet {
    @Override
    public void doGet(ServletRequest req,String name)
            throws ServletException, IOException {
    }
 }

6.2:在运行时组反射使用

              所有类的字节码Class,Method,Field,Constractor都拥有一个方法:


boolean


isAnnotationPresent(Class<? extends Annotation> annotationClass)
          如果指定类型的注解存在于此元素上,则返回 true,否则返回 false。

       注解存在的范围:

       一个类:Retention,用于定义注解存在的策略:

java.lang.annotation

 枚举 RetentionPolicy

三个常量:


枚举常量摘要


CLASS
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。 在.class存在,在运行时擦除


RUNTIME
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。运行时存在。


SOURCE
          编译器要丢弃的注释。只在.java文件中存在@Overied

以下是经常使用的标准定义:

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)

@Target(value={ElementType.METHOD})

public @interface MyTest {

}
以下是myUnit的测试类:
    核心方法:
    public class MyUnit {
    public static void main(String[] args) throws Exception {
        System.err.println("请输入准备被测试的类:");
        Scanner sc = new Scanner(System.in);
        String clsName = sc.nextLine();//clsName = "cn.itcast.demo.RunTest";
        //根据类名获取这个类的字节
        Class cls = Class.forName(clsName);
        //实例化这个类,调用默认构造方法
        Object obj = cls.newInstance();

        //获取这个类中的所有方法
        Method[] ms = cls.getDeclaredMethods();//只获取用户定义的方法,private && public
        //cls.getMethods();获取这个类所方法,包括从父类中继承的方法
        //遍历判断某个方法上是否存在注解
        for(Method m:ms){
            boolean boo2 = m.isAnnotationPresent(MyTest.class);//false
            if(boo2){
                if(m.getModifiers()==Modifier.PRIVATE){
                    System.err.println("这个私有的方法:"+m.getName()+",不支持运行...");
                    continue;
                }
                //运行这个方法
                m.invoke(obj);
            }
        }

7、注解的实例化

       永远都不要实例化注解类,因注解是由系统通过反射实例化的。

时间: 2024-08-02 19:16:54

注解 (65)的相关文章

写自定义参数验证方式

本次发表文章距上次发表已近有两月有余,原因是两月前离开了上家公司(离开原因可能会在年终终结叙述,本篇暂且忽略),来到了现在所在的京东集团,需要花时间熟悉环境和沉淀一下新的东西,因此写文章也暂时没那么勤奋了,不得不说这次是机遇也是对自己职业生涯的一次重要决定. 话说本篇内容主要分享的是自定义方法参数的验证,参数的基本校验在对外接口或者公用方法时经常所见,用过hibernate的验证方式的朋友一定不会陌生,读完本篇内容能够很好的帮助各位朋友对自定义参数验证方式有一定了解: 自定义参数验证的思路 实战

Hibernate,JPA注解@SecondaryTable

使用类一级的 @SecondaryTable或@SecondaryTables注解可以实现单个实体到多个表的映射. 使用 @Column或者 @JoinColumn注解中的table参数可指定某个列所属的特定表. 用例代码如下: 数据库DDL语句 1,CAT表 create table CAT ( id VARCHAR2(32 CHAR) not null, create_time TIMESTAMP(6), update_time TIMESTAMP(6), cat_name VARCHAR2

hibernate注解标签及解释

3. * @author liuguangyi 4. * @content  ejb3注解的API定义在javax.persistence.*包里面. 5. * 6. * 注释说明: 7. * @Entity -- 将一个类声明为一个实体bean(即一个持久化POJO类) 8. * @Id -- 注解声明了该实体bean的标识属性(对应表中的主键). 9. * @Table -- 注解声明了该实体bean映射指定的表(table),目录(catalog)和schema的名字 10. * @Col

Spring集成Redis使用注解

转载:http://blog.csdn.net/u013725455/article/details/52129283 使用Maven项目,添加jar文件依赖: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apac

Hibernate 注解(Annotations 四)多对多双向注解

注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释. 接下来讲解多对多双向注解: 我以用户和房子作为示例讲解. 第一步:准备实体类 House(房间表) package cn.manytomany.entity; import javax.persistence.*; import java.util.HashSet; im

Java的注解

1.什么是注解    语法: @注解名称    注解的作用:代替配置文件,如xml    servlet3.0中,就可以用写web.xml,可以使用注解来配置    注解是由框架来读取的,是给程序看的,而注释是给人看的 2.注解的使用    *定义注解:框架的工作    *使用注解:程序员的工作    *读取注解:框架的工作 3.定义注解类    class A{}//定义类    interface B{}//定义接口    enum C//定义枚举    @interface MyAnno1

Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 hibernate注解的基本用法 使用Session API CRUD操作对象,以及对象状态的转换 hibernate缓存的概念 get()/load()的区别到底是什么,源码分析 代理模式实现的懒加载 saveOrUpdate()/merge()的区别 Assigned(常用,一般情况使用很方便):

MyBatis学习笔记(四) 注解

使用MyBatis注解开发,可以省去类配置文件,简洁方便.但是比较复杂的SQL和动态SQL还是建议书写类配置文件. 注解还是不推荐使用的.只是了解了解!简单的CRUD可以使用注解.简单写写. 把之前的例子改成使用注解的. UserMapper.java 1 package com.cy.mybatis.mapper; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import org.apache.ibatis.annotation

01 start.s汇编代码注解(RTEMS)

start.s 文件中汇编代码的注解(RTEMS) 作者:zhousm    2016年01月01日 处理器:S3C2440  ARM9 操作系统:RTEMS-4.10.2 源文件路径:rtems-4.10.2/c/src/lib/libbsp/arm/gp32/start/start.S 当处理器跳转到指定的地址开始执行时,即从该文件开始执行: 1 /* Some standard definitions...*/ 2 .equ PSR_MODE_USR, 0x10 3 .equ PSR_MO