`

用注解实现get,set方法的调用

    博客分类:
  • java
阅读更多

一、Annotation入门

Annotation的入门比较简单,相关概念请看别人画的一幅导图,看不清的可以下载下来放大了看:



 二、代码目标

以下代码实现的目标有两个:

1、将一个java bean的属性和属性值通过注解调用get方法放在一个map中。

2、将map中的数据通过注解调用set方法,设置到bean对象中。

 

三、代码实现

 

1、注解类

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GetMethod {
	
	public String value() ;
}

 

 

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SetMethod {
	
	public String value() ;
	
}

 

2、map和bean直接相互转化方法

 

public static Object Map2Bean(Map<String,Object> map,Object obj) throws Throwable{
		if(obj == null)
			return null;
		Method[] methods = obj.getClass().getMethods();
		for(Method method : methods){
			if(method.isAnnotationPresent(SetMethod.class)){
				SetMethod sm = method.getAnnotation(SetMethod.class);
				String fieldName = sm.value();
				Object fieldValue = map.get(fieldName);
				method.invoke(obj, fieldValue);
			}
		}
		return obj;
	}
	
	public static Map<String,Object> Bean2Map(Object bean,Map<String,Object> map) throws Throwable{
		if(map == null)
			map = new HashMap<String, Object>();
		Method[] methods = bean.getClass().getMethods();
		for(Method method : methods){
			if(method.isAnnotationPresent(GetMethod.class)){
				GetMethod gm = method.getAnnotation(GetMethod.class);
				String fieldName = gm.value();
				Object fieldValue = method.invoke(bean);
				map.put(fieldName, fieldValue);
			}
		}
		return map;
	}

 

 3、创建一个bean,并用注解标注

 

import java.util.List;

public class User {
	
	private String name;
	
	private int age;
	
	private List<User> friends;
	
	private boolean married;
	
	@GetMethod("married")
	public boolean isMarried() {
		return married;
	}
	
	@SetMethod("married")
	public void setMarried(boolean married) {
		this.married = married;
	}

	@GetMethod("name")
	public String getName() {
		return name;
	}
	
	@SetMethod("name")
	public void setName(String name) {
		this.name = name;
	}
	
	@GetMethod("age")
	public int getAge() {
		return age;
	}
	
	@SetMethod("age")
	public void setAge(int age) {
		this.age = age;
	}
	
	@GetMethod("friends")
	public List<User> getFriends() {
		return friends;
	}
	
	@SetMethod("friends")
	public void setFriends(List<User> friends) {
		this.friends = friends;
	}
	
}

 

 

4、测试

 

public static void main(String[] args) throws Throwable {
		User user = new User();
		user.setAge(18);
		user.setMarried(true);
		user.setName("UserName");
		user.setFriends(new ArrayList<User>());
		
		Map<String,Object> map = Bean2Map(user, null);
		System.out.println(map.get("name"));
		User u = (User) Map2Bean(map, new User());
		System.out.println(u.getName());
	}

 结果:

UserName
UserName

  • 大小: 464.9 KB
0
0
分享到:
评论

相关推荐

    关于Spring注解@Async引发其他注解失效的解决

    主要介绍了关于Spring注解@Async引发其他注解失效的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    day021-反射和注解笔记和代码.rar

    1.1 Class clazz = Class.forName(全限定路径名) (最多使用)默认就是调用下面的方法 1.2 static 类&lt;?&gt; forName(String name, boolean initialize, ClassLoader loader) name:全限定路径名 ...

    Springboot-lombok

    Springboot注解包lombok,加到实体类上不用再写get,set方法,直接调用即可

    Android 对sqlite的封装,实现CRUD

    //set get 方法省略.... } 3. 实现DAO,也就是对实体的CRUD类 /** * @author Kee.Li * * 此类只需要继承TemplateDAO,在构造方法里面给父类的属性dbHelper赋值,即可实现CRUD操作 * 若有复杂的操作,可以自定义...

    hyberbin 框架 POJO类自动生成工具

    4.seter和geter方法方法名就是在成员变量名首字母大写后加上set或get。 5.如果要使用延迟加载,POJO类必需继承com.jplus.basetable.BaseTable。 6.如果要使用延迟加载,表的主键必需唯一,且有@Primarykey()注解...

    hibernate总结

    c) 从一个持久态对象转化过来的,从session的一级缓存中出来的,因为调用了session的一些方法,产生了这种对象(session.close()) SessionFctory: Hibernate映射一对多...

    Hibernate注释大全收藏

    @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...

    标准MFC WinSock ActiveX控件开发实例(II)高级篇

    SendData()是发送数据,不要求将数据带回,因此直接用 VARIANT,而GetData()则要求将数据带回来给调用者,因此定义为 VARIANT *类型,第二个参数DataType故名思义是定义所传送或接收数据的类型,第三个参数是传送或...

    Java 高级特性.doc

    通配符定义的变量主要用作引用,调用与参数化无关的方法,如果要调用与参数化相关的方法,那么必须在使用?通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。 b..向下限定通配符: 正确:Vector...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    由于oSIP是比较底层的SIP协议栈实现,新手较难上手,而官方的示例大都是一些伪代码,需要有实际的例子程序参考学习,而最好的例子就是同样官方发布的oSIP的扩展开发库exosip2,使用exoSIP可以很...

    JdbcTemplateTool.zip

    可以直接把一个PO类存到数据库通过PO类和一个id可以获取到该对象通过PO类可以直接update数据库记录不需要实现 BatchPreparedStatementSetter, 就可以批量update通过一个对PO对象删除对应的数据库记录依然可以使用...

    Z-BlogPHP v1.3 正式版.rar

    新增Network类,调用方式与XMLHttp相同,同时支持curl、fsockopen和file_get_contents; 插件接口系统进行了大修,增加相关函数,修改定义接口方式,对所有接口返回机制作了完善; SQL查询增加了接口,改进了表前缀...

    cms后台管理

    ……get set方法 } 接下来是配置hibernate中jc_mycontent表的配置文件 &lt;?xml version="1.0"?&gt; &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" ...

    乐优商城.xmind

    GET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上 defaultValue 默认值 required 默认值为true , 当为false时 这个注解可以不传这个参数 null || .size()==0 ResponseEntity...

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    核心基础项目内实现类自定义的权限注解,配合RBAC权限模型+拦截器即可实现权限的控制,具体的参考项目中的实现。同时也封装了一些顶层类和结果集等。 注册中心实现高可用配置,详情见eureka的one、two、three三个...

    语言程序设计课后习题答案

    由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。...

    cmd操作命令和linux命令大全收集

    tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    WAP 无线应用协议

    3.3.5 最小需要的实现 43 3.4 日历和电话簿 43 3.4.1 数据格式 43 3.4.2 数据传输 43 3.4.3 终端需要的行为 44 3.5 术语定义 44 3.6 缩略语 45 3.7 参考标准 46 3.8 参考资料 47 3.9 WBMP类型的明确定义标准 48 第4...

Global site tag (gtag.js) - Google Analytics