`

用注解实现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
分享到:
评论

相关推荐

    get set方法生成工具

    - 考虑性能影响,大量使用get和set可能导致额外的内存开销,尤其是在循环或频繁调用时。 总之,"get set方法生成工具"是Java开发中的实用助手,能够简化代码编写,提高生产力。通过合理使用并结合良好的编程实践,...

    lombok jar包 不用get set方法用这个插件不报错

    在标题和描述中提到的,"lombok jar包不用get set方法用这个插件不报错",这意味着使用Lombok可以在不手动编写getter和setter的情况下,依然能够正确地访问和修改对象的属性,而不会出现编译错误。 首先,我们需要...

    JAVA动态对象装配实现 测试--初步实现bean的set/get功能

    以下是一个简单的例子,展示如何使用反射来实现bean的`set`和`get`功能: ```java import java.lang.reflect.Field; import java.lang.reflect.Method; public class DYNC_Object { private String name; ...

    自定义生成set,get方法注释class文件

    这里提到的"自定义生成set,get方法注释class文件"就是一种这样的自动化工具,它可以快速地为类的各个字段自动生成带注释的getter和setter方法。 在MyEclipse这样的集成开发环境中,提供了便捷的方式来进行getter和...

    SpringBoot使用注解实现 Redis 数据库的切换.zip

    这样,我们就可以在业务代码中根据需要调用`RedisUtil`的`getRedisTemplate`方法,传入不同的数据库编号,实现动态切换。 总结来说,要在SpringBoot中通过注解实现Redis数据库的切换,我们需要: 1. 引入SpringBoot...

    用注解实现redis分布式锁,防止短时间内重复请求

    在Java中,我们可以通过AOP(Aspect Oriented Programming,面向切面编程)实现这个逻辑,使用Spring框架的`@Around`注解创建一个切面,拦截标记了特定注解的方法,然后在方法前后进行加锁和解锁操作。这里的关键...

    Jersey实现restful,CXF调用以及jquery AJAX调用

    在Jersey中,你可以使用注解来定义资源类和方法,这些注解帮助你声明HTTP方法(如GET、POST、PUT、DELETE等)、URL路径、请求和响应的类型等。 示例代码: ```java @Path("/users") public class UserService {...

    自定义注解实现缓存机制

    在这个切面中,我们将处理`@CacheResult`注解的方法调用,实现缓存逻辑: ```java import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation...

    反射,注解原理和使用的方法

    - 访问字段:Field类代表类的字段,通过getField()或getDeclaredField()获取,然后调用set()和get()方法。 - 调用方法:Method类代表类的方法,通过getMethod()或getDeclaredMethod()获取,然后调用invoke()方法。...

    Mybatis基于注解实现增删查改和多参数列表查询

    Mybatis 是一款流行的轻量级持久层框架,它允许开发者将SQL语句直接写在Java代码中,通过注解或...在`MybatisLearningChapter4`的学习资料中,你可以找到更具体的示例和实践,进一步加深对Mybatis注解使用方法的理解。

    springmvc实现httpclient调用服务

    这个接口可以使用`@Autowired`注解注入HttpClient,然后创建`HttpGet`或`HttpPost`对象,设置URL、Header等信息,最后通过HttpClient执行请求。 ```java @RestController public class ServiceCallController { @...

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

    为了解决这个问题,作者分析了 @Async 注解的处理方式,发现了一个关键问题:在 AsyncAnnotationBeanPostProcessor 的实现中,对 bean 的处理方式不同。在正常情况下,进来的 bean 已经是被代理的动态代理类,但是在...

    过滤器实现get请求乱码问题

    在Java Spring框架中,可以使用@RequestBody注解并指定编码来解决这个问题。 总的来说,理解HTTP协议、Servlet Filter的工作原理以及字符编码的概念,是解决GET请求乱码问题的关键。同时,熟练运用这些知识能帮助...

    FitnessCenter:使用getset属性进行EJB实践

    在Java中,使用get和set方法实现属性的封装,可以保护数据不受外部代码直接访问,确保数据安全。例如,健身会员的个人信息可能包含敏感信息,如年龄和体重,通过get和set方法,我们可以控制何时以及如何修改这些...

    Android-注解与反射注解知识点反射知识点注解java反射

    4. **访问成员**:`getField()`、`getMethods()`等方法可以获取类的字段和方法,然后通过`set()`、`get()`、`invoke()`等方法进行操作。 5. **泛型与反射**:由于Java的泛型是类型擦除,反射无法直接获取泛型信息,...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    在 `BbtForumController` 中,`@Autowired` 与 `bbtForumService` 属性结合,使得 Spring 框架能够自动查找并注入匹配类型的 Bean(这里是一个 `BbtForumService` 实例),无需显式声明 Bean 或使用 `set` 方法进行...

    用maven创建基于wink的rest服务(二)-携带参数的get请求

    Wink实现了JAX-RS规范,因此我们可以通过注解来声明RESTful方法。例如,创建一个名为`HelloResource`的类,该类包含一个接受查询参数的GET方法: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import...

    Java基础之注解+反射.docx

    - **调用成员**:获取`Field`或`Method`对象后,使用`setAccessible(true)`可访问私有成员,然后通过`set()`和`get()`改变或获取变量值,通过`invoke()`调用方法。 3. **示例代码**: - 在给定的代码示例中,`...

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

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

    Java利用注解进行接口防刷操作

    例如,`@Override`注解用于确保方法是重写父类的方法,`@Deprecated`则表示某个API不再推荐使用。 在接口防刷的场景下,我们可以自定义一个注解,如`@RateLimit`,用于标记需要进行防刷控制的接口。这个注解可以...

Global site tag (gtag.js) - Google Analytics