`
linleizi
  • 浏览: 231357 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Java Bean 遍历和使用注解给Bean的属性添加属性值

 
阅读更多

 

  • Java Bean 的遍历,利用Java的反射原理。Bean的属性添加属性值,使用Java的自定义注解。
  • 例子:
    • 创建注解类:
      • 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, ElementType.FIELD, ElementType.ANNOTATION_TYPE })
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface SetFieldAttribute {
        	String fieldName() default "";
        	String fieldType() default "";
        }
        
         
    • 创建Java Bean:
      • import java.util.List;
        
        
        public class UserBean {
        	
        	private static final long i = 1l;
        	
        	@SetFieldAttribute(fieldName="userId")
        	private String id;
        	
        	@SetFieldAttribute(fieldName="userName")
        	private String name;
        	
        	@SetFieldAttribute(fieldName="userAge")
        	private String age;
        	
        	@SetFieldAttribute(fieldName="userEmail")
        	private String email;
        
        	@SetFieldAttribute(fieldName="userFavourite", fieldType="list")
        	private List<String> favourite;
        	
        	/**
        	 * @return the id
        	 */
        	@SetFieldAttribute(fieldName="userGetId")
        	public String getId() {
        		return id;
        	}
        
        	/**
        	 * @param id the id to set
        	 */
        	public void setId(String id) {
        		this.id = id;
        	}
        
        	/**
        	 * @return the name
        	 */
        	@SetFieldAttribute(fieldName="userGetName")
        	public String getName() {
        		return name;
        	}
        
        	/**
        	 * @param name the name to set
        	 */
        	public void setName(String name) {
        		this.name = name;
        	}
        
        	/**
        	 * @return the age
        	 */
        	@SetFieldAttribute(fieldName="userGetAge")
        	public String getAge() {
        		return age;
        	}
        
        	/**
        	 * @param age the age to set
        	 */
        	public void setAge(String age) {
        		this.age = age;
        	}
        
        	/**
        	 * @return the email
        	 */
        	@SetFieldAttribute(fieldName="userGetEmail")
        	public String getEmail() {
        		return email;
        	}
        
        	/**
        	 * @param email the email to set
        	 */
        	public void setEmail(String email) {
        		this.email = email;
        	}
        
        	/**
        	 * @return the favourite
        	 */
        	@SetFieldAttribute(fieldName="userGetFavourite", fieldType="list")
        	public List<String> getFavourite() {
        		return favourite;
        	}
        
        	/**
        	 * @param favourite the favourite to set
        	 */
        	public void setFavourite(List<String> favourite) {
        		this.favourite = favourite;
        	}
        }
        
         
    • 遍历Bean:
      • import java.lang.reflect.Field;
        import java.lang.reflect.Method;
        import java.lang.reflect.Modifier;
        import java.util.ArrayList;
        import java.util.List;
        
        
        public class MainTest {
        
        	private static UserBean userBean;
        	
        	/**
        	 * @param args
        	 * @throws Exception 
        	 */
        	public static void main(String[] args) throws Exception {
        		setUserBean();
        		traversalBean();
        	}
        	
        	// 创建User Bean对象,并设值
        	private static void setUserBean() {
        		userBean = new UserBean();
        		userBean.setId("123");
        		userBean.setName("Jack");
        		userBean.setAge("35");
        		userBean.setEmail("jack@127.com");
        		List<String> favouriteList = new ArrayList<String>();
        		favouriteList.add("跑步");
        		favouriteList.add("游泳");
        		favouriteList.add("篮球");
        		favouriteList.add("旅游");
        		userBean.setFavourite(favouriteList);
        	}
        	
        	// 遍历 Bean
        	private static void traversalBean() throws Exception{
        		
        		// 通过Bean的属性遍历
        		Field[] fields = userBean.getClass().getDeclaredFields();
        		for (Field field : fields) {
        			String mod = Modifier.toString(field.getModifiers());
        			System.out.println("mod = " + mod);
        			// 跳过静态属性
        			if (mod.indexOf("static") != -1) {
        				continue;
        			}
        			
        			// 取得注解的设置的属性值
        			SetFieldAttribute setField = field.getAnnotation(SetFieldAttribute.class);
        			if (setField != null) {
        				String fieldName = setField.fieldName();
        				String fieldType = setField.fieldType();
        				
        				System.out.println("注解的属性 fieldName = " + fieldName);
        				System.out.println("注解的属性 fieldType = " + fieldType);
        				
        				String getMethod = "get" + field.getName().substring(0, 1).toUpperCase()
        						+ field.getName().substring(1);
        				System.out.println("User Bean 属性的Get方法名 getMethod = " + getMethod);
        				
        				Class[] methodParam = null;
        				Object[] params = {};
        				Object retVal = userBean.getClass().getMethod(getMethod, methodParam).invoke(userBean, params);
        				
        				if (fieldType.equals("list")) {
        					List<String> favouriteList = (List<String>) retVal;
        					int i = 1;
        					for (String favourite : favouriteList) {
        						System.out.println("User Bean 属性的值 " + field.getName() + " : " + i + " = " + favourite);
        						i++;
        					}
        				} else {
        					// 取得Bean属性的值
        					System.out.println("User Bean 属性的值 " + field.getName() + " = " + retVal);
        				}
        			}
        		}
        		
        		System.out.println("******************************************************************");
        		
        		// 通过Bean的方法遍历
        		Method[] methods = userBean.getClass().getDeclaredMethods();
        		for (Method method : methods) {
        			// 取得注解的设置的属性值
        			SetFieldAttribute setField = method.getAnnotation(SetFieldAttribute.class);
        			if (setField != null) {
        				String fieldName = setField.fieldName();
        				String fieldType = setField.fieldType();
        				
        				System.out.println("注解的属性 fieldName = " + fieldName);
        				System.out.println("注解的属性 fieldType = " + fieldType);
        				Class[] methodParam = null;
        				Object[] params = {};
        				Object retVal = null;
        				if (method.getName().substring(0,3).equals("get")) {
        					String mod = Modifier.toString(method.getModifiers());
        					System.out.println("mod = " + mod);
        					System.out.println("User Bean 属性的Get方法名 getMethod = " + method.getName());
        					
        					retVal = userBean.getClass().getMethod(method.getName(), methodParam).invoke(userBean, params);
        			
        					if (fieldType.equals("list")) {
        						List<String> favouriteList = (List<String>) retVal;
        						int i = 1;
        						for (String favourite : favouriteList) {
        							System.out.println("User Bean 属性的值 " + method.getName() + " : " + i + " = " + favourite);
        							i++;
        						}
        					} else {
        						// 取得Bean属性的值
        						System.out.println("User Bean 属性的值 " + method.getName() + " = " + retVal);
        					}
        				}
        			}
        		}
        		
        		
        	}
        
        }
        
         
    • 执行结果:
      • mod = private static final
        
        mod = private
        
        注解的属性 fieldName = userId
        
        注解的属性 fieldType = 
        
        User Bean 属性的Get方法名 getMethod = getId
        
        User Bean 属性的值 id = 123
        
        mod = private
        
        注解的属性 fieldName = userName
        
        注解的属性 fieldType = 
        
        User Bean 属性的Get方法名 getMethod = getName
        
        User Bean 属性的值 name = Jack
        
        mod = private
        
        注解的属性 fieldName = userAge
        
        注解的属性 fieldType = 
        
        User Bean 属性的Get方法名 getMethod = getAge
        
        User Bean 属性的值 age = 35
        
        mod = private
        
        注解的属性 fieldName = userEmail
        
        注解的属性 fieldType = 
        
        User Bean 属性的Get方法名 getMethod = getEmail
        
        User Bean 属性的值 email = jack@127.com
        
        mod = private
        
        注解的属性 fieldName = userFavourite
        
        注解的属性 fieldType = list
        
        User Bean 属性的Get方法名 getMethod = getFavourite
        
        User Bean 属性的值 favourite : 1 = 跑步
        
        User Bean 属性的值 favourite : 2 = 游泳
        
        User Bean 属性的值 favourite : 3 = 篮球
        
        User Bean 属性的值 favourite : 4 = 旅游
        
        ******************************************************************
        
        注解的属性 fieldName = userGetAge
        
        注解的属性 fieldType = 
        
        mod = public
        
        User Bean 属性的Get方法名 getMethod = getAge
        
        User Bean 属性的值 getAge = 35
        
        注解的属性 fieldName = userGetEmail
        
        注解的属性 fieldType = 
        
        mod = public
        
        User Bean 属性的Get方法名 getMethod = getEmail
        
        User Bean 属性的值 getEmail = jack@127.com
        
        注解的属性 fieldName = userGetFavourite
        
        注解的属性 fieldType = list
        
        mod = public
        
        User Bean 属性的Get方法名 getMethod = getFavourite
        
        User Bean 属性的值 getFavourite : 1 = 跑步
        
        User Bean 属性的值 getFavourite : 2 = 游泳
        
        User Bean 属性的值 getFavourite : 3 = 篮球
        
        User Bean 属性的值 getFavourite : 4 = 旅游
        
        注解的属性 fieldName = userGetName
        
        注解的属性 fieldType = 
        
        mod = public
        
        User Bean 属性的Get方法名 getMethod = getName
        
        User Bean 属性的值 getName = Jack
        
        注解的属性 fieldName = userGetId
        
        注解的属性 fieldType = 
        
        mod = public
        
        User Bean 属性的Get方法名 getMethod = getId
        
        User Bean 属性的值 getId = 123
        
         

 

 

分享到:
评论

相关推荐

    day38 17-Spring的Bean的属性注入:注解方式

    本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中的注解。在Spring 2.5版本之后,引入了基于注解的配置,这使得我们可以直接在类或方法上使用注解来声明...

    为了高效地将Json对象转化成Java bean对象,传统上我们是在运行是利用反射来实现.zip

    4. **设置Bean属性**:遍历JSON对象的所有键值对,利用反射的`set()`方法,找到对应的setter方法并设置值。这需要确保JSON键与Java Bean的属性名匹配,或者使用注解来指定映射关系。 5. **处理嵌套结构**:如果JSON...

    json和bean转换

    3. 遍历JSON对象,调用Java Bean的setter方法,将JSON数据赋值给对应的成员变量。 4. 如果JSON对象包含嵌套的JSON对象或数组,可以递归执行上述步骤。 在源码实现时,可以使用Gson库的`Gson.fromJson()`方法,或者...

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

    通过`java.lang.reflect`包中的`Class`、`Constructor`、`Method`和`Field`类,我们可以动态地调用类的方法、构造器和属性。 以下是一个简单的例子,展示如何使用反射来实现bean的`set`和`get`功能: ```java ...

    使用Annotation和反射实现Bean转SQL语句Demo

    在这个`BeanToSqlConverter`类中,我们首先获取Bean类的`@Table`注解来确定表名,然后遍历所有字段,找到带有`@Column`注解的属性,将其列名添加到SQL语句中。最后,生成一个参数占位符的值列表,用于后续绑定实际值...

    BeanToJsonSchema:Java bean转换为Json Schema

    1. **反射机制**:首先,通过Java的反射API遍历Java Bean的所有属性,获取其类型、注解等信息。 2. **类型映射**:将Java类型映射到JSON Schema的数据类型,例如,Java的`String`对应JSON Schema的`string`,`...

    javabean和xml互相转换工具类以及jar包

    只需为JavaBean添加适当的注解,然后使用JAXBContext和Marshaller进行转换。 - **使用第三方库,如Apache Commons Betwixt**:Betwixt是Apache Commons项目的一部分,提供了一种简单的机制来映射Java对象到XML和从...

    mi-yi-collection-bean-master_java_源码

    此外,Bean类还可以包含属性改变的监听器方法,便于响应属性值的变化。 3. **JavaBeans规范**: 这个规范定义了Java组件应该如何编写,以使其能够在各种环境中使用,如EJB、JSF等。规范包括属性的命名规则、序列化...

    sqlite 注解获取建表sql

    首先,让我们了解如何使用注解来定义Java Bean的字段以生成对应的SQL建表语句。在Java中,注解是一种元数据,可以提供有关代码的附加信息。例如,你可以创建一个名为`@Table`的注解来表示一个类对应于数据库中的一个...

    数据库实体对象转换JavaBean_数据库对象转Javabean_

    1. **创建Java Bean类**:根据数据库表结构,创建相应的Java Bean类,每个属性对应表中的一个字段,每个属性的getter和setter方法用于访问和修改这些属性的值。 ```java public class UserBean { private String...

    用java写的一个简单的ioc实现,初学的朋友可以看看

    在Java编程领域,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理职责从代码中分离出来,转交给一个外部容器处理。Spring框架是实现IOC的典型代表,它通过依赖注入(Dependency ...

    java反射机制工具类

    `BeanHelper.java`可能是一个工具类,用于简化对Java Bean的操作,特别是通过反射来设置属性值和获取属性。这类工具通常包含以下功能: 1. `setPropertyValue`: 这个方法接受对象、属性名和属性值,然后使用反射...

    Bean的后置处理器MergedBeanDefinitionPostProcessor.docx

    首先,`CommonAnnotationBeanPostProcessor`是处理Java标准注解(JSR-250)的处理器,如`@PostConstruct`和`@PreDestroy`。这些注解分别用于标记在Bean初始化之后和销毁之前需要执行的方法。`...

    SpringMVC纯注解配置

    "SpringMVC纯注解配置"是SpringMVC框架的一种高级用法,旨在减少XML配置文件的使用,提高开发效率和代码可读性。在这个主题中,我们将深入探讨如何利用注解实现SpringMVC的配置以及jQuery如何处理后台返回的JSON对象...

    基于Java反射机制的“微型”Ioc实现

    3. **实例化与初始化**:使用反射调用无参构造函数创建Bean实例,然后根据Bean的元数据设置属性值,这通常通过`set`方法完成。 4. **生命周期管理**:Ioc容器可能会提供初始化和销毁方法的调用,以支持Bean的生命...

    Spring读取配置文件原理(Spring如何依赖注入的)

    此外,Spring的`@Configuration`和`@Bean`注解允许开发者在Java类中定义配置,这种编程式配置更灵活且易于维护。`@Configuration`类中的`@Bean`方法会被Spring容器调用来创建bean。 总的来说,Spring通过读取配置...

    任意XML转实体类 实体类 转XML 方法 JAVA

    在Java中,我们可以在解析XML时读取这些属性,并将其赋值给对应的字段。例如,如果`&lt;person&gt;`节点有一个`id`属性,我们可以这样处理: ```java Element personNode = ... // 获取到person节点 int id = Integer....

    示例代码:java spring【AnnotationMetadata】的简单使用例子

    接下来,我们遍历扫描到的每个类,通过`MetadataReader`获取`AnnotationMetadata`,并检查类是否声明了`MyAnnotation`,以及输出注解的属性值。 `myBeanProj4`可能是一个包含实际应用的项目,其中定义了带有`...

    使用Java注解模拟spring ioc容器过程解析

    接着,我们遍历Java Bean的所有字段,并获取其类型和Value注解的值,然后使用反射机制来设置字段的值。 通过使用Java注解,我们可以模拟Spring IOC容器的过程,实现依赖注入和控制反转。这种实现方式可以使我们的...

Global site tag (gtag.js) - Google Analytics