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

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

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的值,默认为123String value() default "123";
}

package everyworkdayprogramming._2015_1_23;import java.lang.reflect.Field;public class SuperClass {// 在我们的父类的默认构造方法中来进行属性注入的操作,这里利用了子类会默认调用父类的无参构造方法的特性public SuperClass() {//获得类中的所有的属性Field[] fields = this.getClass().getDeclaredFields();//遍历fieldsfor (Field field : fields) {//如果这个field有注解MyAnnotionif (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());}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASCII码对照表

1、字母转换成ASCII码 1 string str "hello";2 byte[] array new byte[1]; 3 array System.Text.Encoding.ASCII.GetBytes(str); //把str的每个字符转换成ascii码4 5 int asciicode1 (short)(array[0]);//h 的…

2015-2月的小程序们

马上就要过年了,今天是二月最后一天上班了,心情有些激动,恨不得立马就到家去。再来公司的时候就是3.1号了,所以在离开之前把2月份的小程序们储存起来。虽然很多都是参考了网上的小程序练习,但是自己有自己的风格&#…

SHOI2009 会场预约

题目传送门 嗯,这道题的标签是STL,因为这个STL用的确实太妙了 这道题目要求维护一堆区间,而一个重要的操作是要删除所有与新区间冲突的区间 虽然可以用\(Splay\)来操作,但用STL里的set也绝对不虚 其中最精妙的当属这个重载运算符 …

创建者模式 builder

package mode.bulider;/*** * 首先是汽车,组成零件有:玻璃、轮胎、发动机;他们都是抽象的概念,所以用抽象类来创建* * */ public class Car {Glass glass;Wheel wheel;Engine engine; } package mode.bulider; /*** * 抽象的玻璃*…

平行四边形的特殊性质

定义平行四边形内角平分线围城的四边形为$\lambda$四边形$\lambda$四边形是矩形 $\lambda$四边形的中线为平行四边形中心$\lambda$四边形的对角线和平行四边形的边平行转载于:https://www.cnblogs.com/guoshaoyang/p/11011612.html

静态方法工厂模式

工厂模式有三种方法来实现,一种是通过传入参数的名称来决定创建哪一个产品,这种方法有很大的缺点,就是如果传入的产品名称如果不小心错误的话,就是无法来创建我们想得到的产品的。另一种是方法工厂模式,这种工厂模式中…

Elasticsearch 入门到高手的成长阶梯-索引的基本操作(1)

1. 创建索引 Elasticsearch中索引的名称&#xff0c;必须符合以下要求&#xff1a; 字母只能够是小写字母不能够包含特殊字符&#xff0c;如\, /, *, ?, ", <, >, |, , ,, #等名称不能够以英文的中划线“-”、下划线“_”以及加号“”开头名称不可以是“.”或“.…

对象的深度复制

首先什么是深度复制&#xff1f;什么又是浅复制&#xff1f; 百度告诉我---------------> 浅复制&#xff1a;将一个对象复制后&#xff0c;基本类型都会重新创建&#xff0c;而引用类型指向的还是原对象所指的引用&#xff1b; 深复制&#xff1a;讲一个对象复制后&…

java 判断int类型为空

int id 10; if("0".equals(String.valueOf(id)) || "null".equals(String.valueOf(id)) || id < 0) return false;比如&#xff1a; "0".equals(String.valueOf(定义的int类型参数)) 判断int类型不能为空或不能小于等于0 也可以转换为String…

P1-0:项目框架搭建

后台java&#xff0c;前端用html,js &#xff0c;数据库用mysql,云数据库 构建BS结构项目 转载于:https://www.cnblogs.com/superisland/p/11016113.html

2.MySQL中的索引

索引就像树的目录&#xff0c;是为了更快的找到所要找的内容&#xff08;数据&#xff09;。MySQL中&#xff0c;索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引模型&#xff0c;如innodb是采用的是B树的索引模型&#xff0c;本篇主要以innodb存储引擎的索引…

python学习-10 运算符1

1.加&#xff0c;减-&#xff0c;乘*&#xff0c;除/ 例如&#xff1a; a 1 b 2 c a b print(c) 运算结果&#xff1a; 3Process finished with exit code 0 a 1 b 2 c a - b print(c) 运算结果&#xff1a; -1Process finished with exit code 0 a 1 b 2 c a * b pr…

如何在idea中使用Mybatis-generator插件快速生成代码

代码下载地址&#xff1a;https://download.csdn.net/download/hua_faded/10671547 一、配置Maven pom.xml 文件 在pom.xml增加以下插件&#xff1a; <build><finalName>zsxt</finalName> <plugins> <plugin> <groupId>org.mybatis.genera…

游戏开发-cocos creator技巧-cc.Component.EventHandler自定义click事件

cocos creator有两种给按钮注册click事件的方式&#xff0c; EventHandler的方式虽然有点麻烦&#xff0c;但是比较灵活&#xff0c;使用时候注意每个参数必须填写正确&#xff0c;否则click时候会报null的错误第一种 node_level.on(cc.Node.EventType.TOUCH_START, this.on_pa…

Java 泛型(1):基本原理

1.1 擦除 15.7例子 Java的泛型是同伙擦除来实现的&#xff0c;在泛型代码内部&#xff0c;无法获得任何有关泛型参数类型的信息(这一点有别于C等实现)&#xff0c;这意味着你在使用泛型时&#xff0c;无法知道任何类型信息&#xff0c;只知道你在使用一个对象&#xff0c;…

21-MySQL-Ubuntu-快速回到SQL语句的行首和行末

行首: Ctrl A 行末:Ctrl E转载于:https://www.cnblogs.com/summer1019/p/11043692.html

django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

CBV加装饰器 第一种  method_decorator(装饰器&#xff09;  加在get上 第二种  method_decorator(login_auth,nameget)  加在类上 第三种  method_decorator(login_auth)  加在dispatch上  3.7的要return super().dispatch def login(request):if request.metho…

Dubbo理论知识

本文是作者根据官方文档以及自己平时的使用情况&#xff0c;对 Dubbo 所做的一个总结。如果不懂 Dubbo 的使用的话&#xff0c;可以参考我的这篇文章《超详细&#xff0c;新手都能看懂 &#xff01;使用SpringBootDubbo 搭建一个简单的分布式服务》 Dubbo 官网&#xff1a;http…

外观模式(facade)

外观模式是为了解决类与类之间的依赖关系的&#xff0c;像spring一样&#xff0c;可以将类和类之间的关系配置到配置文件中&#xff0c;而外观模式就是将他们的关系放在一个Facade类中&#xff0c;降低了类类之间的耦合度&#xff0c;该模式中没有涉及到接口&#xff0c;看下类…

套接字TCP控制台程序客户端代码示范

套接字TCP控制台程序客户端代码示范 转载于:https://www.cnblogs.com/txwtech/p/11056770.html