• BeanWrapper


    1、JavaBeans

     

    org.springframework.beans包遵守Sun提供的JavaBeans标准。

     

    一个JavaBean需要满足以下条件:带有默认无参构造器的类,并且需要遵守一个命名规范。

     

    举个例子,比如有一个属性叫bingoMadness,那么必须要有一个setter方法setBingoMadness(..)和一个getter方法getBingoMadness()

     

    在 Spring中,IOC核心是在org.springframework.beans包中。而其中最为核心的部分,则是BeanWrapper。 BeanWrapper,顾名思义,就是bean的包装器。所以,它的主要工作,就是对任何一个bean,进行属性(包括内嵌属性)的设置和方法的调用。

     

    2BeanWrapper

     

    在beans包中一个相当重要的类——BeanWrapper接口和它对应的实现(BeanWrapperImpl)。

     

    Javadoc中说到,BeanWrapper可以设置(set)和获取(get)属性值(单独地或者大批量的)、可以得到属性描述符(property descriptors),也可以查询属性是否可读或可写。BeanWrapper还支持嵌套属性,能够设置子属性的属性并支持无限的延伸。

     

    另外,BeanWrapper支持添加标准Javabens PropertyChangeListeners和VetoableChangeListeners,而并不需要在目标类中提供代码。 

     

    最后一点也很重要,BeanWrapper支持设置带索引的属性。

     

    BeanWrapper就像它的名字一样:包装一个bean来提供额外的操作,比如设置或检索属性值。

     

    3设置和获取基本的和嵌套的属性

     

    假设有两个类

    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;
        }
    }
    public class Employee {
    	private String name;
    	private float salary;
     
    	public String getName() {
    		return this.name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    	public float getSalary() {
    		return salary;
    	}
     
    	public void setSalary(float salary) {
    		this.salary = salary;
    	}
    }
    

      

     

    可以使用BeanWrapper操作

    BeanWrapper company = new BeanWrapperImpl(new Company());
    company.setPropertyValue("name", "Some Company Inc.");
    
    BeanWrapper employee = new BeanWrapperImpl(new Employee());
    employee.setPropertyValue("name", "Jim Stravinsky");
    company.setPropertyValue("managingDirector", employee.getWrappedInstance());
    
    String name = (String) company.getPropertyValue("managingDirector.name");
    System.out.println(name);
    
    最终输出:Jim Stravinsky

     

    4、其他方法

     

    public void testClassMethods(){
        BeanWrapper company = new BeanWrapperImpl(new Company());
        //获取属性的class类:class java.lang.String
        System.out.println(company.getPropertyType("name"));
        //是否可读:true
        System.out.println(company.isReadableProperty("name"));
        //是否可读:false
        System.out.println(company.isReadableProperty("nameSelf"));
        //new一个实例:com.agan.spring.beanwrapper.Company@4cc0edeb
        System.out.println(company.getWrappedInstance());
    }
    

      

    等等。。。

     

    根据经验,是否可读,可以的情况:有一个String,可以用此方法判断这个String是不是该对象的一个属性。避免了反射再获取全部属性再遍历的麻烦。

  • 相关阅读:
    AWTK-MVVM:用 C 语言实现 Model
    MTU1500情况下,发送1460和1448长度数据
    linux mtu =1500情况下tcpdump抓包分析
    自己总结的pycharm超常用快捷键
    ICMP协议是IP层协议
    IP 分段
    ubuntu18.04安装中文输入法
    tcp 窗口大小
    flask学习笔记(二)
    开始学习前的环境安装
  • 原文地址:https://www.cnblogs.com/AganRun/p/11816200.html
Copyright © 2020-2023  润新知