码迷,mamicode.com
首页 > 其他好文 > 详细

通过继承来实现注解方式的属性注入

时间:2015-02-14 11:06:09      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:java   注解   属性注入   通过注解注入属性   

要使用注解来注入属性,首先就要定义一个注解,注解的定义如下:

package everyworkdayprogramming._2015_1_23;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*四个元注解,他们的意思 (个人记忆)依次是 生成文档 可以被子类使用 在运行时可以使用 注解的目标是FIELD*/
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyAnnotion {
	//有一个名为VALUE的值,默认为123
	String value() default "123";
}

package everyworkdayprogramming._2015_1_23;

import java.lang.reflect.Field;

public class SuperClass {
	// 在我们的父类的默认构造方法中来进行属性注入的操作,这里利用了子类会默认调用父类的无参构造方法的特性
	public SuperClass() {
		//获得类中的所有的属性
		Field[] fields = this.getClass().getDeclaredFields();
		//遍历fields
		for (Field field : fields) {
			//如果这个field有注解MyAnnotion
			if (field.isAnnotationPresent(MyAnnotion.class)) {
				//获得field对应的MyAnnotion实例
				MyAnnotion myAnnotion = field.getAnnotation(MyAnnotion.class);
				try {
					//因为field是私有属性,所以要设置这里
					field.setAccessible(true);
					//修改field的值为annotion中注入的值
					field.set(this, myAnnotion.value());
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

package everyworkdayprogramming._2015_1_23;

/*子类直接继承我们的父类*/
public class SubClass extends SuperClass {
	// 调用注解注入属性,默认值是123,这里设置为test
	@MyAnnotion(value = "test")
	private String num;

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	public static void main(String[] args) {
		// 输出一下我们的属性值
		System.out.println(new SubClass().getNum());
	}
}


通过继承来实现注解方式的属性注入

标签:java   注解   属性注入   通过注解注入属性   

原文地址:http://blog.csdn.net/u012613903/article/details/43816209

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!