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);
}
}
}
}
}
}
相关推荐
本文将详细讲解使用注解方式进行Bean属性注入的方法,以及相关的源码和工具应用。 首先,让我们了解Spring中的注解。在Spring 2.5版本之后,引入了基于注解的配置,这使得我们可以直接在类或方法上使用注解来声明...
4. **设置Bean属性**:遍历JSON对象的所有键值对,利用反射的`set()`方法,找到对应的setter方法并设置值。这需要确保JSON键与Java Bean的属性名匹配,或者使用注解来指定映射关系。 5. **处理嵌套结构**:如果JSON...
3. 遍历JSON对象,调用Java Bean的setter方法,将JSON数据赋值给对应的成员变量。 4. 如果JSON对象包含嵌套的JSON对象或数组,可以递归执行上述步骤。 在源码实现时,可以使用Gson库的`Gson.fromJson()`方法,或者...
通过`java.lang.reflect`包中的`Class`、`Constructor`、`Method`和`Field`类,我们可以动态地调用类的方法、构造器和属性。 以下是一个简单的例子,展示如何使用反射来实现bean的`set`和`get`功能: ```java ...
在这个`BeanToSqlConverter`类中,我们首先获取Bean类的`@Table`注解来确定表名,然后遍历所有字段,找到带有`@Column`注解的属性,将其列名添加到SQL语句中。最后,生成一个参数占位符的值列表,用于后续绑定实际值...
1. **反射机制**:首先,通过Java的反射API遍历Java Bean的所有属性,获取其类型、注解等信息。 2. **类型映射**:将Java类型映射到JSON Schema的数据类型,例如,Java的`String`对应JSON Schema的`string`,`...
只需为JavaBean添加适当的注解,然后使用JAXBContext和Marshaller进行转换。 - **使用第三方库,如Apache Commons Betwixt**:Betwixt是Apache Commons项目的一部分,提供了一种简单的机制来映射Java对象到XML和从...
此外,Bean类还可以包含属性改变的监听器方法,便于响应属性值的变化。 3. **JavaBeans规范**: 这个规范定义了Java组件应该如何编写,以使其能够在各种环境中使用,如EJB、JSF等。规范包括属性的命名规则、序列化...
首先,让我们了解如何使用注解来定义Java Bean的字段以生成对应的SQL建表语句。在Java中,注解是一种元数据,可以提供有关代码的附加信息。例如,你可以创建一个名为`@Table`的注解来表示一个类对应于数据库中的一个...
1. **创建Java Bean类**:根据数据库表结构,创建相应的Java Bean类,每个属性对应表中的一个字段,每个属性的getter和setter方法用于访问和修改这些属性的值。 ```java public class UserBean { private String...
在Java编程领域,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理职责从代码中分离出来,转交给一个外部容器处理。Spring框架是实现IOC的典型代表,它通过依赖注入(Dependency ...
`BeanHelper.java`可能是一个工具类,用于简化对Java Bean的操作,特别是通过反射来设置属性值和获取属性。这类工具通常包含以下功能: 1. `setPropertyValue`: 这个方法接受对象、属性名和属性值,然后使用反射...
首先,`CommonAnnotationBeanPostProcessor`是处理Java标准注解(JSR-250)的处理器,如`@PostConstruct`和`@PreDestroy`。这些注解分别用于标记在Bean初始化之后和销毁之前需要执行的方法。`...
"SpringMVC纯注解配置"是SpringMVC框架的一种高级用法,旨在减少XML配置文件的使用,提高开发效率和代码可读性。在这个主题中,我们将深入探讨如何利用注解实现SpringMVC的配置以及jQuery如何处理后台返回的JSON对象...
3. **实例化与初始化**:使用反射调用无参构造函数创建Bean实例,然后根据Bean的元数据设置属性值,这通常通过`set`方法完成。 4. **生命周期管理**:Ioc容器可能会提供初始化和销毁方法的调用,以支持Bean的生命...
此外,Spring的`@Configuration`和`@Bean`注解允许开发者在Java类中定义配置,这种编程式配置更灵活且易于维护。`@Configuration`类中的`@Bean`方法会被Spring容器调用来创建bean。 总的来说,Spring通过读取配置...
在Java中,我们可以在解析XML时读取这些属性,并将其赋值给对应的字段。例如,如果`<person>`节点有一个`id`属性,我们可以这样处理: ```java Element personNode = ... // 获取到person节点 int id = Integer....
接下来,我们遍历扫描到的每个类,通过`MetadataReader`获取`AnnotationMetadata`,并检查类是否声明了`MyAnnotation`,以及输出注解的属性值。 `myBeanProj4`可能是一个包含实际应用的项目,其中定义了带有`...
接着,我们遍历Java Bean的所有字段,并获取其类型和Value注解的值,然后使用反射机制来设置字段的值。 通过使用Java注解,我们可以模拟Spring IOC容器的过程,实现依赖注入和控制反转。这种实现方式可以使我们的...