`
uule
  • 浏览: 6348840 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

BeanWrapper 设置和获取属性值

 
阅读更多

5.4. Bean处理和BeanWrapper - Spring Framework reference 2.0.5 参考手册中文版

spring中的BeanWrapper,Bean Factory,ApplicationContext

 

Spring 学习 (二)__BeanWrapper及其实现

 

BeanWrapper提供了设置和获取属性值(单个的或者是批量的),获取属性描述信息、查询只读或者可写属性等功能。不仅如此,BeanWrapper还支持嵌套属性,你可以不受嵌套深度限制对子属性的值进行设置。所以,BeanWrapper无需任何辅助代码就可以支持标准JavaBean的PropertyChangeListeners和VetoableChangeListeners。除此之外,BeanWrapper还提供了设置索引属性的支持。通常情况下,我们不在应用程序中直接使用BeanWrapper而是使用DataBinder 和BeanFactory。

BeanWrapper这个名字本身就暗示了它的功能:封装了一个bean的行为,诸如设置和获取属性值等。

 

设置和获取属性值以及嵌套属性

设置和获取属性可以通过使用重载的setPropertyValue(s)getPropertyValue(s)方法来完成。在Spring自带的JavaDoc中对它们有详细的描述。值得一提的是,在这其中存在一些针对对象属性的潜在约定规则。下面是一些例子:

表 5.1. 属性示例

表达式说明
name 指向属性name,与getName() 或 isName() 和 setName()相对应。
account.name 指向属性account的嵌套属性name,与之对应的是getAccount().setName()和getAccount().getName()
account[2] 指向索引属性account的第三个元素,索引属性可能是一个数组(array),列表(list)或其它天然有序的容器。
account[COMPANYNAME] 指向一个Map实体account中以COMPANYNAME作为键值(key)所对应的值

例子1:

 

public interface Action {
    public String execute();
}


public class UpperAction implements Action {
    private String msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String execute() {
        return (msg.toUpperCase());
    }
}

 设置值方法1 (JAVA反射):

我们知道,如果动态设置一个对象属性,可以借助Java的Reflection机制完成:

 

try {
    Class cls = Class.forName("net.sg.spring.service.UpperAction");
    Object obj = cls.newInstance();
    Method method = cls.getMethod("setMsg", new Class[]{String.class});
    method.invoke(obj, new Object[]{"hello"});
    System.out.println(((UpperAction) obj).execute());

  } catch (Exception e) {}

 

 设置值方法2( BeanWrapper方式):

 

 try {
     Class cls = Class.forName("net.sg.spring.service.UpperAction");
     Object obj = cls.newInstance();
     BeanWrapper beanWrapper = new BeanWrapperImpl(obj);
     beanWrapper.setPropertyValue("msg","hello");
     System.out.println(beanWrapper.getPropertyValue("msg"));
     System.out.println(((UpperAction)obj).getMsg());

 }  catch (Exception e) {}

 

 例子2:

 

public class Employee {

    private float salary;

    public float getSalary() {
        return salary;
    }
    public void setSalary(float salary) {
        this.salary = salary;
    }
}

 

public class Company {
    private String name;
    private Employee managingDirector;

    public String getName()	{ 
        return this.name; 
    }
    public void setName(String name) { 
        this.name = name; 
    } 
    public Employee getManagingDirector() { 
        return this.managingDirector; 
    }
    public void setManagingDirector(Employee managingDirector) {
        this.managingDirector = managingDirector;
    }
}

 

BeanWrapper company = BeanWrapperImpl(new Company());
// setting the company name..
company.setPropertyValue("name", "Some Company Inc.");

// ... can also be done like this:
PropertyValue value = new PropertyValue("name", "Some Company Inc.");
company.setPropertyValue(value);

// ok, let's create the director and tie it to the company:
BeanWrapper jim = BeanWrapperImpl(new Employee());
jim.setPropertyValue("name", "Jim Stravinsky");
company.setPropertyValue("managingDirector", jim.getWrappedInstance());

// retrieving the salary of the managingDirector through the company
Float salary = (Float) company.getPropertyValue("managingDirector.salary");

 .

 

 

 

分享到:
评论

相关推荐

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

    - **访问和修改属性值**:使用`Field`的`get(Object obj)`和`set(Object obj, Object value)`方法可以读取和设置Bean实例的属性值。 - **遍历getter和setter**:`Class.getMethod(String name, Class<?>... ...

    26 Spring Core 数据绑定之DataBinder实现示例及背后原理探究慕课专栏(1)1

    通过BeanWrapper,我们可以获取到Bean的PropertyEditor,用于类型转换,然后设置属性值。然而,当类型不匹配时,BeanWrapper会抛出`org.springframework.beans.TypeMismatchException`异常。 2. **DataBinder实现**...

    品味Spring 的魅力

    它提供了一个统一的接口,用于获取和设置Bean的属性值,无论这些属性是否嵌套在其他Bean中。 1. **BeanWrapper的实现**: - BeanWrapper的主要实现类为`BeanWrapperImpl`,它通过反射机制实现了对Bean属性的操作。...

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

    - **setter方法**:用于设置JavaBean的属性值,如`public void setName(String name)`。 3. **序列化**: - JavaBean可以实现`Serializable`接口,使其支持数据持久化,方便在内存、文件或网络间传输。 4. **...

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

    "setter方式"是DI的一种实现方式,它通过调用对象的setter方法来设置其属性值。这篇博客可能详细介绍了如何使用setter注入向bean中注入各种类型的值,如基本类型、字符串、其他bean、集合类型等。 1. **基本类型的...

    spring_reference_inchinese_m2.pdf

    `BeanWrapper`接口提供了对JavaBean属性的标准化访问,通过它可以在运行时动态地获取或设置bean的属性值,无需关心具体的JavaBean类型。这对于实现IoC和AOP等高级功能至关重要,因为它提供了对对象状态的统一访问点...

    Spring Framework 3.0.0.4

    3. **BeanDefinition**:这个接口代表了bean的元数据,包含bean的类名、初始化方法、属性值、依赖关系等信息。这些信息被用来实例化和配置bean。 4. **PropertyEditor**:Spring利用PropertyEditor来处理bean属性的...

    spring-framework-4-reference

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

    spring开发指南(pdf)

    - **BeanWrapper**:提供了一种统一的接口来访问和操作Java Bean属性,可以方便地获取和设置Bean的属性值。 - **BeanFactory**:是最基本的容器接口,负责实例化、定位和配置应用程序中的对象。它是Spring IoC容器...

    mnr-two.rar_Java_

    3. **BeanUtils.class**:这是Apache Commons BeanUtils库中的一个类,提供了许多实用方法,用于操作JavaBean属性,如复制属性、设置和获取属性值等。 4. **PropertyEditorRegistrySupport.class**:这是Spring框架...

    spring-framework-4-reference.pdf

    SpEL可以用于bean定义中,为bean属性设置值,也可以在运行时查询和操作对象属性。 Spring AOP(面向切面编程)是Spring的一个重要组件,它允许开发者将横切关注点(例如日志、安全等)与业务逻辑分离,从而使得代码...

    spring+MVC中文教程pdf

    - BeanWrapper,一个包装了JavaBean的对象,提供了设置/获取属性等操作; - BeanFactory,负责管理对象的创建和DI,是Spring中Bean的容器; - ApplicationContext,扩展了BeanFactory,支持国际化和事件传播; -...

    JPA save()方法将字段更新为null的解决方案

    * 获取属性中为空的字段 * * @param target * @return */ private static String[] getNullField(Object target) { BeanWrapper beanWrapper = new BeanWrapperImpl(target); PropertyDescriptor[] ...

    hibernater

    BeanWrapper是Spring框架中用于操作JavaBeans属性的标准接口,它提供了统一的属性访问和修改机制,使得开发者可以独立于特定的JavaBean实现来操作对象的属性。 **BeanFactory** BeanFactory是Spring容器的基本形态...

    SSH 面试题

    它提供了统一的方法来读取和设置Bean的属性值,简化了Bean的处理流程。 #### 20. 元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,cascade属性应该取什么值? 为了使Hibernate级联保存集合中的...

Global site tag (gtag.js) - Google Analytics