`

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中文开发参考手册

    - **深入 Bean 属性和构造函数参数**:可以使用构造函数注入来传递参数,也可以使用 setter 方法注入来设置属性。 - **方法注入**:包括 Lookup 方法注入和任意方法的替换。 - **Lookup方法注入**:允许 Bean 在...

    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 ...

Global site tag (gtag.js) - Google Analytics