spring IOC学习2

beans包下次级接口及实现类分析:

ConfigurablePropertyAccessor:封装PropertyAccessor的配置方法的接口,还扩展了PropertyEditorRegistry接口,该接口定义了方法,用于PropertyEditor管理。

    void setConversionService(@Nullable ConversionService conversionService):指定用于转换的Spring 3.0 ConversionService
属性值,作为JavaBeans PropertyEditors的替代。

    ConversionService getConversionService():返回关联的ConversionService(如果有)。

    void setExtractOldValueForEditor(boolean extractOldValueForEditor):
    boolean isExtractOldValueForEditor():设置是否在应用时提取旧属性值,属性编辑器为属性的新值。

    void setAutoGrowNestedPaths(boolean autoGrowNestedPaths):*设置此实例是否应尝试“自动增长”a

    boolean isAutoGrowNestedPaths():返回是否已激活嵌套路径的“自动增长”。

BeanWrapper:Spring的低级JavaBeans基础结构的中央接口。

接口方法如下:

    /**
    * 指定阵列和集合自动增长的限制。
    * <p>普通BeanWrapper的默认值是无限制的。
    * @since 4.1
    */
	void setAutoGrowCollectionLimit(int autoGrowCollectionLimit);

	/**
    * 返回阵列和集合自动增长的限制。
    * @since 4.1
    */
	int getAutoGrowCollectionLimit();

    /**
    * 返回此对象包装的bean实例。
    */
	Object getWrappedInstance();

    /**
    * 返回包装的bean实例的类型。
    */
	Class<?> getWrappedClass();

    /**
    * 获取包装对象的PropertyDescriptors
    *(由标准JavaBeans内确定)。
    * @return包装对象的PropertyDescriptors
    */
	PropertyDescriptor[] getPropertyDescriptors();

    /**
    * 获取特定属性的属性描述符
    * 包裹物体的*。
    * @param propertyName获取描述符的属性
    *(可能是嵌套路径,但没有索引/映射属性)
    * @return指定属性的属性描述符
    * @throws InvalidPropertyException如果没有这样的属性
    */
	PropertyDescriptor getPropertyDescriptor(String propertyName) throws InvalidPropertyException;

BeanWrapperImpl:BeanWrapper实现类,负责bean注入,属性注入

BeanWrapperImpl实现类代码太多,具体详情看spring官方源码,beans包下BeanWrapperImpl类。

使用用例如下:

public class Person {
	
	private String name;
	
	private int age;
	
	private Relatives relatives;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Relatives getRelatives() {
		return relatives;
	}

	public void setRelatives(Relatives relatives) {
		this.relatives = relatives;
	}
}
public class Relatives {
	
	private int money;

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}
}
public class StartMain {
	
	public static void main(String[] args) {
		//Annotation
		BeanWrapper wrapper = new BeanWrapperImpl(new Person());
		wrapper.setPropertyValue("name", "kill");
		wrapper.setPropertyValue("age", 23);
		
		BeanWrapper wrapper2 = new BeanWrapperImpl(new Relatives());
		wrapper2.setPropertyValue(new PropertyValue("money", 10000));
		
		wrapper.setPropertyValue("relatives", wrapper2.getWrappedInstance());
		
		System.err.println(wrapper.getPropertyValue("relatives.money"));
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值