`

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-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中文帮助文档

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

    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 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 chm文档

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

    Spring3.x企业应用开发实战(完整版) part1

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

    Springframework开发参考手册chm格式

     Spring Framework 开发手册 chm,一份对Spring特性的参考指南,内容涵盖Spring概述、使用场景、Spring2.0新特性、面向切面编程、中间层、WEB层、校验,数据绑定,BeanWrapper,与属性编辑器、使用Spring进行面向...

    gwtbean:一个使用 JavaScriptObject 的概念,如 Spring BeanWrapper

    Gwt-Bean 一个使用 JavaScriptObject 的概念,如 Spring BeanWrapper

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

    背景在 Spring 配置文件中使用 <value.../> 元素来为属性指定属性值,如下面的例子所示:上面的 XML 是如何实现的呢?Spring MVC 数

    Spring Framework 开发参考 chm 手册.rar

    Spring Framework 开发参考 chm 手册,一份对Spring特性的参考指南,内容涵盖Spring概述、使用场景、Spring2.0新特性、面向切面编程、中间层、WEB层、校验,数据绑定,BeanWrapper,与属性编辑器、使用Spring进行...

    Spring @Autowired

    NULL 博文链接:https://zhangzhenting.iteye.com/blog/1455511

    SPRING API 2.0.CHM

    BeanWrapper BeanWrapperImpl BeforeAdvice BeforeAdviceAdapter BindErrorsTag BindException BindingErrorProcessor BindingResult BindingResultUtils BindInitializer BindStatus BindTag BindUtils...

    spring-framework-reference-4.1.2

    Setter-based dependency injection ............................................................ 34 Dependency resolution process ................................................................. 35 ...

    春天来了,继续手写自己的Spring,从0到1,从IOC到DI、AOP、MVC四个阶段,项目已经传到了github和码云上面

    熬了半个多月的时间,每天坐在电脑面前十几个小时,从Spring官网拉下来了spring-framework这个项目的源码,边看源码,边从网上找资料,整个项目中使用的设计模式也是非常的经典,如工厂模式:BeanFactory,代理模式...

    spring-framework-reference4.1.4

    Setter-based dependency injection ............................................................ 34 Dependency resolution process ................................................................. 35 ...

    dpspring:手写简单框架

    ApplicationContext 简单料理界工厂类 getBean() 从ioc容器中回去一个实例的方法 大流程如下 1.在调用servlet init方法后, 就要初始化ApplicationContext 默认是单利, 而且是延时加载的lazy 2.DI是在初始化以后...

    前端-后端java的Util类的工具类

    ├─Android快速开发不可或缺的11个辅助类 │ AppUtils.java │ DensityUtils.java │ HttpUtils.java │ KeyBoardUtils.java │ L.java │ NetUtils.java │ ScreenUtils.java │ SDCardUtils.java │ SPUtils.java...

Global site tag (gtag.js) - Google Analytics