一、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
相关推荐
- 考虑性能影响,大量使用get和set可能导致额外的内存开销,尤其是在循环或频繁调用时。 总之,"get set方法生成工具"是Java开发中的实用助手,能够简化代码编写,提高生产力。通过合理使用并结合良好的编程实践,...
在标题和描述中提到的,"lombok jar包不用get set方法用这个插件不报错",这意味着使用Lombok可以在不手动编写getter和setter的情况下,依然能够正确地访问和修改对象的属性,而不会出现编译错误。 首先,我们需要...
以下是一个简单的例子,展示如何使用反射来实现bean的`set`和`get`功能: ```java import java.lang.reflect.Field; import java.lang.reflect.Method; public class DYNC_Object { private String name; ...
这里提到的"自定义生成set,get方法注释class文件"就是一种这样的自动化工具,它可以快速地为类的各个字段自动生成带注释的getter和setter方法。 在MyEclipse这样的集成开发环境中,提供了便捷的方式来进行getter和...
这样,我们就可以在业务代码中根据需要调用`RedisUtil`的`getRedisTemplate`方法,传入不同的数据库编号,实现动态切换。 总结来说,要在SpringBoot中通过注解实现Redis数据库的切换,我们需要: 1. 引入SpringBoot...
在Java中,我们可以通过AOP(Aspect Oriented Programming,面向切面编程)实现这个逻辑,使用Spring框架的`@Around`注解创建一个切面,拦截标记了特定注解的方法,然后在方法前后进行加锁和解锁操作。这里的关键...
在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 是一款流行的轻量级持久层框架,它允许开发者将SQL语句直接写在Java代码中,通过注解或...在`MybatisLearningChapter4`的学习资料中,你可以找到更具体的示例和实践,进一步加深对Mybatis注解使用方法的理解。
这个接口可以使用`@Autowired`注解注入HttpClient,然后创建`HttpGet`或`HttpPost`对象,设置URL、Header等信息,最后通过HttpClient执行请求。 ```java @RestController public class ServiceCallController { @...
为了解决这个问题,作者分析了 @Async 注解的处理方式,发现了一个关键问题:在 AsyncAnnotationBeanPostProcessor 的实现中,对 bean 的处理方式不同。在正常情况下,进来的 bean 已经是被代理的动态代理类,但是在...
在Java Spring框架中,可以使用@RequestBody注解并指定编码来解决这个问题。 总的来说,理解HTTP协议、Servlet Filter的工作原理以及字符编码的概念,是解决GET请求乱码问题的关键。同时,熟练运用这些知识能帮助...
在Java中,使用get和set方法实现属性的封装,可以保护数据不受外部代码直接访问,确保数据安全。例如,健身会员的个人信息可能包含敏感信息,如年龄和体重,通过get和set方法,我们可以控制何时以及如何修改这些...
4. **访问成员**:`getField()`、`getMethods()`等方法可以获取类的字段和方法,然后通过`set()`、`get()`、`invoke()`等方法进行操作。 5. **泛型与反射**:由于Java的泛型是类型擦除,反射无法直接获取泛型信息,...
在 `BbtForumController` 中,`@Autowired` 与 `bbtForumService` 属性结合,使得 Spring 框架能够自动查找并注入匹配类型的 Bean(这里是一个 `BbtForumService` 实例),无需显式声明 Bean 或使用 `set` 方法进行...
Wink实现了JAX-RS规范,因此我们可以通过注解来声明RESTful方法。例如,创建一个名为`HelloResource`的类,该类包含一个接受查询参数的GET方法: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import...
- **调用成员**:获取`Field`或`Method`对象后,使用`setAccessible(true)`可访问私有成员,然后通过`set()`和`get()`改变或获取变量值,通过`invoke()`调用方法。 3. **示例代码**: - 在给定的代码示例中,`...
1.1 Class clazz = Class.forName(全限定路径名) (最多使用)默认就是调用下面的方法 1.2 static 类<?> forName(String name, boolean initialize, ClassLoader loader) name:全限定路径名 ...
例如,`@Override`注解用于确保方法是重写父类的方法,`@Deprecated`则表示某个API不再推荐使用。 在接口防刷的场景下,我们可以自定义一个注解,如`@RateLimit`,用于标记需要进行防刷控制的接口。这个注解可以...