`
uule
  • 浏览: 6322377 次
  • 性别: 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");

 .

 

 

 

分享到:
评论

相关推荐

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

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

    Spring Framework 3.0.0.4

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

    Spring 应用框架技术.doc

    - `<property>`:设置Bean的属性,通常配合`<value>`标签来注入值。 以上就是Spring框架的关键知识点,包括Spring与Struts的区别、AOP、DI、核心类、ApplicationContext、资源管理、Web框架集成、事件处理、国际化...

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

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

    Spring API

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    Spring中文帮助文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 ...

    spring boot空属性赋值问题与aspect日志实现方法

    这个方法首先创建了一个`BeanWrapper`实例来封装`source`对象,然后遍历所有的属性描述符(`PropertyDescriptor`),检查每个属性的值是否为空,如果为空则将其属性名添加到`nullPropertyNames`列表中。最后,将列表...

    Spring 2.0 开发参考手册

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

    spring chm文档

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...

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

    5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...

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

    5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章...

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

    5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章...

Global site tag (gtag.js) - Google Analytics