Spring 为 Resource 接口提供了如下实现类:
- UrlResource:访问网络资源的实现类。
- ClassPathResource:访问类加载路径里资源的实现类。
- FileSystemResource:访问文件系统里资源的实现类。
- ServletContextResource:访问相对于 ServletContext 路径里的资源的实现类:
- InputStreamResource:访问输入流资源的实现类。
- ByteArrayResource:访问字节数组资源的实现类。
spring有很多子项目,比如Spring Web Flow\Spring security/Spring .net/Spring android/Spring Data等等
spring以及其他的任意一种框架或者底层来说,比如windows、linux这种操作系统,是作为用户和机器之间的平台,作为一种中间介质存在。
不同特点操作系统管理的是存储、通信、外围设备等资源的管理,为用户提供统一的接口。spring提供“企业的基础应用”,持久化、数据集成、事务处理消息、web应用、分布式计算等。
spring通过ioc管理pojo对象以及之间的耦合关系(纵向管理),通过AOP通过动态的方式增强服务的功能(横向管理)。
spring两个主要的容器BeanFactory,另外一个更高级一点ApplicationContext;
BeanDefinition管理spring应用中各个对象的相互依赖关系——就是所谓容器里面的水!
手工建立一个Factory
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
ClassPathResource resource = new ClassPathResource("path...");
reader.loadBeanDefinitions(resource);
IOC初始化过程
1)resource的定位过程:告诉资源位置
2)BeanDefinition载入:POJO对象的抽象;
3)BeanDefinition注册到IOC容器:注册到一个hashmap中。
Bean的定义载入和依赖载入是独立的过程,依赖注入一般发生在第一次通过getBean()索取Bean的时候。(但,如果Bean初始化的lazyinit,定义了依赖,那定义载入的时候依赖注入也会触发)