javabean是否是一种IoC容器?其实在Spring中大量用到了propertyDescriptor进行属性值的设置
package org.geekbang.ioc.beans;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyEditorSupport;
import java.util.stream.Stream;
/**
* @Author 阳
* @Date 2022/8/27 19:29
* @Version 1.0
*/
public class BeanInfoDemo {
/**
* javabean是否是一种IoC容器?其实在Spring中大量用到了propertyDescriptor进行属性值的设置
* @param args
* @throws IntrospectionException
*/
public static void main(String[] args) throws IntrospectionException {
//通过JavaBean一种内省的方式获取类的元配置信息
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class,Object.class);
Stream.of(beanInfo.getPropertyDescriptors()).forEach(propertyDescriptor -> {
Class<?> propertyType = propertyDescriptor.getPropertyType();
String propertyTypeName = propertyType.getName();
if ("age".equals(propertyTypeName)){
//为属性描述器设置属性编辑器
propertyDescriptor.createPropertyEditor()
}
});
}
//继承PropertyEditorSupport
static class StringToIntegerPropertyEditor extends PropertyEditorSupport{
//实现属性类型的一个转换,例如String转Integer
public void setAsText(String text) throws java.lang.IllegalArgumentException{
setValue(Integer.valueOf(text));
}
}
}
什么是IOC
IoC是控制反转,主要有依赖查找和依赖注入两种实现,无需自行创建或者管理他们的依赖关系,依赖关系将被自动注入到需要他们的对象中去
Spring IoC容器概述
- 依赖查找
- 依赖注入
- 依赖来源
- 配置元信息
- IoC容器
- Spring应用上下文
- 使用SpringIoc容器
- SpringIoC容器生命周期
依赖查找和依赖注入的区别
依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或者标准API实现,依赖注入则是手动或自动依赖绑定方式,无需依赖特定容器和API
Spring作为IoC容器有什么优势
- 典型的Ioc管理,依赖查找和依赖注入
- AOP抽象
- 事务抽象
- 事件机制
- SPI扩展
- 强大的第三方整合
- 易测试性
- 更好的面向对象