Annotation(注解)

注解:给程序带上一些标记,从而影响编译器运行程序的结果!!!

注释:提高程序的可读性,对程序运行没有影响!!!

 注解的作用:

            1)可以在程序上(类,方法,属性)携带信息

             2)注解简化(取代)配置文件(xml或properties)

每个框架都有两种方案:

              1)把参数放在xml文件中

              2)把参数放在注解中

 

1、常见的注解

/**
	 * 1)告诉编译器强制对方法进行覆盖
	 */
	@Override
	public String toString() {
		return super.toString();
	}
	

	/**
	 * 2)告诉编译器压制代码中出现的警告
	 * @return
	 */
	@SuppressWarnings(value = { "unchecked" })
	public List save(){
		List list = new ArrayList();
		return list;
	}
	
	/**
	 * 3)在运行时让方法提示过期
	 */
	@Deprecated
	public void update(){
		
	}

 

2、定义注解语法

 

public @interface Author {
}

3、带有属性的注解

public @interface Author {

	//声明属性
	String name();
	String modifyTime();
}

4、注解细节

 

1)属性的类型可以基本数据类型。也可以是数组类型

2)使用default关键子给注解一个默认值

3)当注解中使用value名称的属性,则可以省略“value=”不写

 

public @interface Author {

	//声明属性
	String name();
	String modifyTime() default "2015-06-25";//给属性带上默认值
	String[] address();//带有数组类型的属性
	//如果注解的属性名称为value,那么在使用注解的时候可以不写value=
	String[] value();
	//String[] names();
	//String value();
}

5、元注解

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,                     LOCAL_VARIABLE})
声明注解的使用范围.
TYPE: 注解可以用在类上
FIELD:注解可以用在属性上
METHOD:用在方法上
PARAMETER:用在参数声明上面
CONSTRUCTOR:用在构造方法上面
LOCAL_VARIABLE:用在本地变量上面
    
@Retention(RetentionPolicy.SOURCE)
声明注解的有效范围
RetentionPolicy.SOURCE: 该注解只在源码中有效!
RetentionPolicy.CLASS:  该注解在源码中,和字节码中有效!(默认)
RetentionPolicy.RUNTIME: 该注解在源码中,和字节码中有效,运行字节码的时候有效!

 

 

 

6、反射注解

使用反射技术获取(类,方法,属性)注解的信息

//1)得到save方法对象
			Method m = this.getClass().getMethod("save", null);
			
			//2)得到方法上面的注解
			Author author = m.getAnnotation(Author.class);
			System.out.println(author);
			
			//3)获取注解里面的属性(数据)
			String name = author.name();
			String time = author.modifyTime();
			System.out.println(name);
			System.out.println(time);

7、 反射注解的案例(重点)
改造泛型DAO的案例:
问题: 当具体的实体类对象的属性和表的字段不一致时,BaseDao就无法使用了!!这时需要使用注解绑定类和表名,属性和字段的关系。改造后的实体对象如下

 

/**
 * 表的注解
 * @author APPle
 *
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
	String name();//数据的表名
}


/**
 * 字段的注解
 * @author APPle
 *
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
	String name();//字段名称
}


@Table(name = "teacher_list")
public class Teacher {
	
	@Column(name = "tid")
	private int id;
	
	@Column(name = "tname")
	private String name;
	
	@Column(name = "tage")
	private int age;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}
	@Override
	public String toString() {
		return "Teacher [age=" + age + ", id=" + id + ", name=" + name + "]";
	}
}


       
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值