展会信息港展会大全

Java 自定义注解的使用示例 android开发教程
来源:互联网   发布日期:2016-01-19 12:24:00   浏览:2759次  

导读:annotationJDK1 5 后有一个性特性,注解:java lang annotation包。平时我们可能会用到它来规避一些警告、使代码通过编译。注解---java中的元数据:修饰数据的数据。使用自定义注解需要注意到:1 修饰类的注解 ...

annotation

JDK1.5 后有一个性特性,注解:java.lang.annotation包。

平时我们可能会用到它来规避一些警告、使代码通过编译。

注解--->java中的元数据:修饰数据的数据。使用自定义注解需要注意到:

1. 修饰类的注解必须通过字节码去获取;

2. 修饰方法的注解必须通过Method对象获取;

3. 修饰成员变量的注解必须通过Field对象获龋

下面展示一个利用注解拼接sql语句的示例:

自定义的annotation Column,用于修饰成员变量

1

2

3

4

5

6

7

8

9

10

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.FIELD)//修饰成员变量的注解

@Retention(RetentionPolicy.RUNTIME)

public @interface Column {

String getColunmName();

}

自定义的annotation Entity,用于修饰类

1

2

3

4

5

6

7

8

9

10

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target(ElementType.TYPE)//标识注解的type

@Retention(RetentionPolicy.RUNTIME)

public @interface Entity {

String getTableName();

}

Student 类,被自定义注解修饰的实体类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

@Entity(getTableName="exam_student")//被自定义注解Entity修饰的类

public class Student {

@Column(getColunmName="stu_name")//被自定义注解Column修饰的成员变量

private String name;

private int age;

@Column(getColunmName="stu_no")///被自定义注解Column修饰的成员变量

private String no;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getNo() {

return no;

}

public void setNo(String no) {

this.no = no;

}

}

Session 类,利用反射机制拼接sql语句的工具类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

import java.lang.reflect.Field;

public class Session {

public String getSql(Object obj){

StringBuilder builder = new StringBuilder();

builder.append("insert into ");

Class<? extends Object> c = obj.getClass();

String simpleName = c.getSimpleName();

if(c.isAnnotationPresent(Entity.class)){

Entity entity = (Entity)c.getAnnotation(Entity.class);

simpleName = entity.getTableName();//获取到Student的类修饰属性 @Entity(getTableName="exam_student")里的exam_student

}

builder.append(simpleName).append("(");

Field[] fs = c.getDeclaredFields();

for(int i = 0; i < fs.length;i++){

//builder = i==0 ? builder.append(fs[i].getName()) : builder.append(",").append(fs[i].getName());

String coloumnName = fs[i].getName();

if(fs[i].isAnnotationPresent(Column.class)){

Column col = fs[i].getAnnotation(Column.class);

coloumnName = col.getColunmName();//获取到Student的成员变量修饰属性getColunmName="stu_name"和getColunmName="stu_no"

}

builder = i==0 ? builder.append(coloumnName) : builder.append(",").append(coloumnName);

}

builder.append(") values").append(getString(fs.length));

return builder.toString();

}

public String getString(int length){

StringBuilder builder = new StringBuilder();

builder.append("(");

for(int i = 0; i < length;i++){

builder = i==0 ? builder.append("?") : builder.append(", ?");

}

builder.append(")");

return builder.toString();

}

}

SessionTest 测试类

1

2

3

4

5

6

7

8

9

10

11

12

13

package lu.a.lu;

public class SessionTest {

/**

* @param args

*/

public static void main(String[] args) {

Session session = new Session();

System.out.println(session.getSql(new Student()));

}

}

以上是完整的test例子,自定义注解在平时应用中并不常用。在Java web端后台开发架构时可能会用到。

赞助本站

人工智能实验室

相关热词: Java 注解 android开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港