-
@Override 继承的方法 @Deprecation 过时的方法 @SuppressWarnings("deprecation") 忽略过时方法所带的警告查看全部
-
厉害,大神查看全部
-
概念:通过反射获取类、函数或成员的运行时注解信息,从而实现动态控制程序运行的逻辑。 @Inherited 只能实现类的继承,而接口是无法继承的。即接口的注解无法影响到实现接口的类上面。另外,父类的方法的注解也无法被子类继承。 核心代码: //1. 使用类加载器加载类 Class c = Class.forName("anno.test.Child"); //2. 找到类上面的注解 boolean isExist=c.isAnnotationPresent(Description.class);//isAnnotationParse()判断类上是否存在Description这样的注解 if(isExist){ //3.获得注解实例 Description d = (Description)c.getAnnotation(Description.class); System.out.println(d.value()); } //4.找到方法上的注解 Method[] mts = c.getMethods(); for (Method mt : mts) { if(mt.isAnnotationPresent(Description.class)){ Description d2 = (Description)mt.getAnnotation(Description.class); System.out.println(d2.value()); }} //另外一种获取类上的注解的途径 Annotation[] annos = c.getAnnotations(); for (Annotation anno : annos) { if(anno instanceof Description){ System.out.println(((Description) anno).value()); }} //另一种获取方法上的注解的途径 for (Method mt : mts){ Annotation[] annos2 = mt.getAnnotations(); for (Annotation anno : annos2) { if(anno instanceof Description){ System.out.println(同上); }}}查看全部
-
1. 虽然 public @interface Description{ String desc(); } @Description(desc="the name method") 不会报错。 但不符合规范,既然只有一个成员,就要使用value作为成员名,改成: public @interface Description{ String value(); } 然后在使用注解的时候,直接赋值,不写成员名和等号: @Description("the name method") 以上方式,约定俗成,比较直观。 2. 没有成员的注解——标志注解(比如常见的@Override),在使用的时候不加括号。 3. 当一个方法被规定为({ElementType.METHOD})就表示只能用于方法的注解,如果用在类上面,就会报错(添加 ElementType.TYPE 则可适用于类)。这里没有包含关系,例如只写ElementType.TYPE 则不能对方法进行注解,只能对类或接口进行注解。 4. @Documented(属于标识注解,生成javadoc时会包含注解) 创建一个Javadoc :右击项目--> Export --> Java --> Javadoc --> next -->Browser 选择要存放的文件夹。点击finish就生成成功了。 打开这个文件夹,点击index.html,就能查看该项目的一些摘要。查看全部
-
使用自定义注解 使用注解的语法: @<注解名>(<成员名1>=<成员值1>,<成员名1>=<成员值1>,...) @Description(desc="I am eyeColor",author="Mooc boy",age=18) public String eyeColor(){ return "red"; } @Description注解在eyeColor()方法上使用。查看全部
-
java自定义注解 1、自定义注解的语法要求 a、使用@interface关键字定义注解 b、成员以无参无异常方式声明 c、可以用default为成员指定一个默认值 d、如果注解只有一个成员,则成员名必须取名value(),在使用时可以忽略成员名和赋值 号(=); e、成员类型是受限的,合法的类型包括原始类型String,Class,Annotation,Enumeration f、注解类可以没有成员,没有成员的注解称为标识注解 2、元注解 @Documented 生成javadoc时包含注解 @Inherited 允许子类继承 @Retention(RetentionPolicy.RUNTIME):声明周期 [SOURCE只在源码显示,编译时会丢弃; CLASS编译时会记录到class中,运行时忽略; RUNTIME运行时存在,可以通过反射读取] @Target({ElementType.METHOD}) [CONSTRUCTOR构造方法声明; FIELD字段声明; LOCAL_VARIABLE局部变量声明; METHOD方法声明; PACKAGE包声明; PARAMETER参数声明; RYPE类接口]查看全部
-
注解的分类: 1、按照运行机制分为 源码注解:注解只在源码中存在,编译成.class文件就不存在了 编译时注解:注解在源码和.class文件中都存在(如:JDK内置系统注解) 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解(如:Spring中@Autowried) 2、按照来源分为 JDK内置系统注解、元注解、自定义注解、第三方注解 3.元注解:注解的注解查看全部
-
Spring:@Autowired @Service @Repository @Autowired:可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。通过 @Autowired的使用来消除 set ,get方法。 用法: public class UserManagerImpl implements UserManager { @Autowired private UserDao userDao; } @Service:用于标注业务层组件。定义某个类为一个bean,则在这个类的类名前一行使用@Service("XXX"),就相当于讲这个类定义为一个bean,bean名称为XXX。而无需去xml文件内去配置。 @Repository:用于标注数据访问组件,即DAO组件。查看全部
-
元注解查看全部
-
项目说明查看全部
-
通常情况下,需要写一个配置文件查看全部
-
作用域,生命周期查看全部
-
Class c = Class.forName("com.ann.test.Child") 使用类加载器加载类:com.ann.test包中的Child类 boolean isExist = c.isAnnotationPresent(Description.class) 类中是否存在注解Description,返回一个Boolean值保存在isExist(is存在)中查看全部
-
反射,注解拼装sql语句 将sql语句的表明用注解封装 对应的注解在类名上 将sql语句的字段名用注解封装 对应的注解在类的成员变量上 用反射获得对象的类类型,用.getClass方法因为传进的参数为具体实例对象 Stringbiulder拼装sql语句 类类型的.getAnnotation(注解的类类型)方法获得类注解对象 在此之前通过isAnnoytation(注解的类类型)的返回值确定是否存在该注解 获得表名 where 之后条件语句的拼装 1.示例中的方法 字段名的获取:通过成员变量上的注解获得,遍历fields对象集,通过字段对象的.getAnnotation获得注解对象,然后注解对象.value()获得注解中的定义value元素的值 字段值的获取:在上述遍历fields的循环中,通过拼接字符串'get'字段名首字母大写,在将字段名后部分拼装获得方法名,通过反射拿到方法对象实例,然后通过方法对象invoke调用方法获得字段的值 评论区中有人说通过反射直接拿字段名,然后再拼接字段对应的方法名获得方法对象通过调用invoke拿到字段值查看全部
-
要实现的功能:调用方法query(),返回对应的sql语句 1. 首先,考虑代码如何与数据库进行映射。 使用注释将数据库中的表名、字段名与Java类的成员变量形成映射。(如图) 需要在项目中创建两个注解类(Table/Column)查看全部
举报
0/150
提交
取消