`

spring 里用beanwrapper的类可动态对一个类的属性getter,setter调用

阅读更多
package test;

import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
import test.model.Person;
import test.model.Student;

public class Test {

public static void main(String[] args) {
Person p = new Person();
p.setId(10000);
p.setName("张三");
//p.setStudent(new Student());
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(p);
bw.setPropertyValue("name", "五四");
//如果嵌套对象为null,则会自动创建一个对象出来(注意嵌套对象一定要有一个无参的构造方法)
bw.setAutoGrowNestedPaths(true);
bw.setPropertyValue("student.address", "香港中文大学");
//System.out.println(p.getName());
//System.out.println(p.getStudent().getAddress());
System.out.println(bw.getPropertyValue("name"));
System.out.println(bw.getPropertyValue("student.address"));

//输出结果:   五四
               香港中文大学

}
}





package test.model;

public class Person {
private String name;

private int id;

private Student student;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public Student getStudent() {
return student;
}

public void setStudent(Student student) {
this.student = student;
}


}


package test.model;

public class Student {

public final static String school = "中国传媒大学";

private String className = "软件工程2班";

private String address;

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

private void test(){
System.out.println("执行了test=========================== ");
}

}


备注:

DirectFieldAccessor
Spring内部大量使用BeanWrapper进行属性取值赋值(setter/getter),不过到目前为止没有简单的办法去获取对象字段值;之前都是通过ReflectionUtils获取Field然后进行操作;Spring 4.1提供了DirectFieldAccessor来完成此功能:

        //嵌套设置/访问对象字段数据
        DirectFieldAccessor accessor = new DirectFieldAccessor(bean);
        //如果嵌套对象为null,字段创建
        accessor.setAutoGrowNestedPaths(true);
        //设置字段值
        accessor.setPropertyValue("bean2.name", "zhangsan");
        //读取字段值
        System.out.println(accessor.getPropertyValue("bean2.name"));




分享到:
评论

相关推荐

    Spring - -setter方式 向bean中注入各种类型的值

    例如,如果你有一个`Person`类,包含一个`age`属性,可以定义一个`setAge(int age)`方法,Spring会通过这个方法设置年龄值。 2. **字符串注入**:在XML配置文件中,你可以直接指定字符串值,或者在Java配置类中使用...

    25 Spring Core 数据绑定之BeanWrapper实现示例及背后原理探究慕课专栏1

    `MutablePropertyValues`是一个可以动态修改的属性值集合,它可以方便地从Map或其他数据结构中复制属性值。 数据绑定的核心在于`PropertyEditor`,这是Spring用来进行类型转换的关键组件。当我们尝试将字符串或者...

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

    - **Spring Framework**:Spring提供了`org.springframework.beans.BeanWrapper`和`org.springframework.beans.PropertyAccessor`接口,简化了对Bean的操作,包括注解的处理。 在实际开发中,遍历Java Bean和利用...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring JDBC包结构...

    Spring学习笔记(精华全记录)

    Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,Spring逐渐剥离出来成为了一个独立且功能强大的框架。尽管有人质疑Spring是否完全遵循Java标准,但其广泛应用和良好口碑...

    Spring从入门到精通

    - **第一个使用Spring实现HelloWorld的例子:** - **编写存放HelloWorld的Java文件HelloWorld.java:** 定义一个简单的类,包含输出信息的方法。 - **配置Spring的config.xml:** 定义Bean及其依赖关系。 - **...

    初入spring的几个jar包

    2. spring-context-5.0.2.RELEASE.jar:上下文模块是Spring框架的一个扩展,它在core模块的基础上增加了对国际化、事件传播、AOP、任务调度等功能的支持。ApplicationContext接口是该模块的主要接口,它是...

    spring教程+电子书

    - **BeanWrapper**:提供了一种统一的方式处理不同类型的 Bean 属性。 - **BeanFactory**:负责实例化、定位和配置应用程序中的对象。 - **ApplicationContext**:扩展了 `BeanFactory`,提供了更多的企业级服务...

    品味Spring 的魅力

    BeanWrapper是Spring框架中的一个重要组件,用于封装对Bean属性的操作。它提供了一个统一的接口,用于获取和设置Bean的属性值,无论这些属性是否嵌套在其他Bean中。 1. **BeanWrapper的实现**: - BeanWrapper的...

    Spring中文帮助文档

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一...

    黑马程序员-----javaBean的操作类学习笔记

    - JavaBean可以通过`PropertyUtils`或`BeanUtils`类(来自Apache Commons BeanUtils库)进行便捷的属性读写,例如`BeanUtils.copyProperties(destBean, srcBean)`可以复制一个bean的所有属性到另一个bean。...

    2022年品味Spring 的魅力Java教程.docx

    它是一个接口,用于包装任何Java Bean,并提供对其属性和方法的访问。在Spring的实现中,`BeanWrapperImpl`是BeanWrapper的主要实现类,它负责处理Bean的属性设置和方法调用。通过BeanWrapper,开发者可以方便地操作...

    Spring API

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一种...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    spring-framework-4-reference

    BeanWrapper类用于操作JavaBean属性,包括获取和设置属性值以及属性类型转换。Spring类型转换系统提供了一个全面的类型转换服务,支持各种类型之间的转换。Spring还提供了一套标准的日期和时间格式化配置。 最后,...

    Spring 2.0 开发参考手册

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...

    spring_FrameWork3.0

    - **BeanWrapper 和 bean 处理:** BeanWrapper 是一个用于读写 Bean 属性的工具类,可以方便地进行属性的设置和获取。 - **PropertyEditor:** PropertyEditor 用于自定义 Bean 属性的类型转换规则,可以用于处理...

    spring chm文档

    9.9.1. 对一个特定的 DataSource 使用错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. Spring ...

    Spring 开发参考手册

    **Spring** 是一个开源框架,最初是由 Rod Johnson 创建的,旨在简化企业级 Java 应用程序的开发过程。Spring 提供了一种轻量级的方式来管理和配置 Java 对象(Beans),并通过依赖注入(Dependency Injection, DI)...

Global site tag (gtag.js) - Google Analytics