理解spring

一、spring知识点梳理

  • 我们经常说的Spring其实指的是Spring Framework(spring 框架)。
  • Spring的核心就是IoC(控制反转)AOP(面向切面编程)

       ***下面主要针对IoC进行剖析讲解,IoC简单理解就是控制对象创建的角色由程序员反转为Spring IoC容器。

       

 

  • Spring IoC容器本质上就是创建类的实例的工厂,并且对类的实例进行管理。
  • Spring IoC容器需要通过Bean工厂来实现,在Spring框架中,主要有两个工厂接口:BeanFactory接口ApplicationContext接口

       ***其中BeanFactory接口是Spring早期创建Bean对象的工厂接口。

       ***而我们现在大多数是通过ApplicationContext接口进行Bean对象的创建。

  • Spring IoC 容器加载Bean信息的方式有XML配置方式注解方式

       ***XML配置方式:bean标签

       ***注解方式:@Component、@Controller、@Service、@Repository,需要使用context:component-scan标签配合使用。

  • Spring IoC容器的创建方式主要有两种:在Java Application中创建在Web Application中创建

        ***Java Application中创建Spring IoC容器主要是通过ApplicationContext接口的两个实现类来完成的:

            ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。

        ***Web Application中创建Spring IoC容器主要是通过ApplicationContext接口的实现类WebApplicationContext来实现的。

        ***WebApplicationContext是通过ContextLoaderListener(实现ServletContextListener接口)创建之后,放入ServletContext 域对象中的。

  • Spring DI(依赖注入)是基于IoC使用的。简单理解就是Bean工厂在生成Bean对象的时候,如果Bean对象需要装配一个属性,那么就会通过DI将属性值注入给对象的属性。

       ***依赖注入的方式主要有构造方法注入(了解)set方法注入(重点)

       ***set方法注入又分为手动装配方式注入自动装配方式注入

             ***手动装配方式(XML方式):bean标签的子标签property,需要在类中指定set方法

             ***自动装配方式(注解方式):@Autowired注解、@Resource注解。

二、spring容器初始化过程

  •  web容器初始化spring容器的过程
  • spring容器高层视图

    

  •  内部工作机制

    

流程说明:

1、ResourceLoader从存储介质中加载Spring配置信息,并使用Resource表示这个配置文件的资源;

2、BeanDefinitionReader读取Resource所指向的配置文件资源,然后解析配置文件。配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中;

3、容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理后器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理。主要完成以下两项工作:

1)对使用到占位符的<bean>元素标签进行解析,得到最终的配置值,这意味对一些半成品式的BeanDefinition对象进行加工处理并得到成品的BeanDefinition对象;

2)对BeanDefinitionRegistry中的BeanDefinition进行扫描,通过Java反射机制找出所有属性编辑器的Bean(实现java.beans.PropertyEditor接口的Bean),并自动将它们注册到Spring容器的属性编辑器注册表中(PropertyEditorRegistry);

4.Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,并调用InstantiationStrategy着手进行Bean实例化的工作;

5.在实例化Bean时,Spring容器使用BeanWrapper对Bean进行封装,BeanWrapper提供了很多以Java反射机制操作Bean的方法,它将结合该Bean的BeanDefinition以及容器中属性编辑器,完成Bean属性的设置工作;

6.利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。

Spring容器确实堪称一部设计精密的机器,其内部拥有众多的组件和装置。Spring的高明之处在于,它使用众多接口描绘出了所有装置的蓝图,构建好Spring的骨架,继而通过继承体系层层推演,不断丰富,最终让Spring成为有血有肉的完整的框架。所以查看Spring框架的源码时,有两条清晰可见的脉络:

1)接口层描述了容器的重要组件及组件间的协作关系;

2)继承体系逐步实现组件的各项功能。

接口层清晰地勾勒出Spring框架的高层功能,框架脉络呼之欲出。有了接口层抽象的描述后,不但Spring自己可以提供具体的实现,任何第三方组织也可以提供不同实现, 可以说Spring完善的接口层使框架的扩展性得到了很好的保证。纵向继承体系的逐步扩展,分步骤地实现框架的功能,这种实现方案保证了框架功能不会堆积在某些类的身上,造成过重的代码逻辑负载,框架的复杂度被完美地分解开了。

Spring组件按其所承担的角色可以划分为两类:

1)物料组件:Resource、BeanDefinition、PropertyEditor以及最终的Bean等,它们是加工流程中被加工、被消费的组件,就像流水线上被加工的物料;

2)加工设备组件:ResourceLoader、BeanDefinitionReader、BeanFactoryPostProcessor、InstantiationStrategy以及BeanWrapper等组件像是流水线上不同环节的加工设备,对物料组件进行加工处理。

摘录于《Spring 3.x 企业应用实战》

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值