博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过继承来实现注解方式的属性注入
阅读量:7090 次
发布时间:2019-06-28

本文共 1702 字,大约阅读时间需要 5 分钟。

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

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());	}}

转载于:https://www.cnblogs.com/qzmpc/p/6339566.html

你可能感兴趣的文章
彩虹表的概念
查看>>
苹果紧急发布新系统iOS 11.0.1 修复多种BUG
查看>>
坚持做创业护卫队的770天
查看>>
《ANSYS Workbench 14有限元分析自学手册》——导读
查看>>
6个你必须用到AJAX的地方与6个不必用到的地方
查看>>
OpenExpressApp 框架结构(2)
查看>>
read和变量设定方式
查看>>
g++编译过程和动态链接库
查看>>
IPSec实验的一些体会
查看>>
c中static作用
查看>>
给初学者的RxJava2.0教程(三)(转)
查看>>
探究ConcurrentHashMap中键值对在Segment[]的下标如何确定
查看>>
Docker学习记录3: 搭建 Private Registry
查看>>
计算机图形学 补 光线跟踪
查看>>
spring整合logback配置文件
查看>>
captive portal
查看>>
mysql基本数据类型(mysql学习笔记三)
查看>>
Laravel踩坑笔记——illuminate/html被抛弃
查看>>
飞秋命令行
查看>>
做题时一时没想起来的问题总结
查看>>