Spring4.x 读后小结

1.IoC(单例模式,工厂模式)

容器级别的类:

Resource:xml等配置文件的通用表示类,对IoC容器来说,资源对象只有一种,就是Resource

ResourceLoader:将xml等配置文件转换为Resource对象,方便后续进行配置信息读取

BeanDefinition:配置文件中配置的bean的信息对应的一个个对象。

BeanDefinitionReader:从Resource中读取信息,映射为BeanDefinition对象。

BeanDefinitionRegistry:一个大Map,用于装BeanDefinition。

BeanFactory:从BeanDefinitionRegistry获取BeanDefinition的信息,采用对应的InstantiationStrategy(实例化策略)去生成对应的Bean实例。

InstantiationStrategy:实例化策略,如Cglib,即采用何种方式实例化Bean。

BeanFactoryPostProcessor(所有Bean受影响):在有了BeanFactory,但还没有开始实例化Bean的时候,调用该接口的postProcessBeanFactory方法,可以用于处理BeanDefinition的信息。

BeanWrapper:用于将实例化后的Bean的各种内部属性给配置好(未初始化)。如,一个Bean中有一个Integer的属性a,则需要BeanWrapper先生成一个bean.a=0,这样的属性值。若之后该值有对应的数值,如5,则在Bean的初始化中进行。和BeanWrapper相关的类还涉及到了PropertyEditor,BeanInfo,PropertyDescriptor等类,暂不展开。

BeanPostProcessor(所有Bean受影响):BeanWrapper修饰好Bean后,会交由该类进行自定义再修饰。postProcessBeforeInitialization方法先执行,然后执行Bean本身的初始化方法,然后执行postProcessAfterInitialization方法。

Bean级别的类:

InitializingBean(实现的Bean受影响):在Bean本身初始化之前,若Bean实现了该接口的afterPropertiesSet方法,则会先执行该方法,再初始化(进行赋值等操作)。若Bean还实现了@PostConstruct,则在afterPropertiesSet方法后,执行@PostConstruct注解标注的方法

2.容器事件(观察者模式)

要搭建事件模型,就需要注册表,事件,广播器,监听器4种元素。即监听器注册到注册表中,用广播器产生事件,在注册表中找到对应事件的监听器,调用监听器相关方法,处理该事件。

Spring中,ApplicationContext接口的抽象实现类中就有一个广播器ApplicationEventMulticaster,所以,我们可以采用获取ApplicationContext的方式来发布事件,只要提前实现好对应的监听器接口GenericApplicationListener(其他的也可以,具体的可以看继承关系),然后定义好事件(实现ApplicationEvent接口)就可以了。

3.AOP(代理模式)

Aspect Oriented Programing,面向切面编程。Java的类继承机制用于了对纵向代码结构的抽象,但是对于横向的每个方法中都有的非业务代码,却不能很好的进行抽象。因此有人提出了采用AOP的方式,将后者进行抽象。对于java来说,AOP的方案可以从3个方面入手:

  1. 编译阶段
  2. 类加载阶段
  3. 程序运行期间

Spring对AOP的实现

Spring主要是从 3.程序运行期 进行AOP的。Spring的AOP的粒度是方法级别的,其对应方案有两种,一种是基于JDK的动态代理的AOP,一种是基于CGLib方法拦截的AOP。后者可以完成方法代理范围比JDK的要广。

基于JDK动态代理的AOP

JDK本身提供了Proxy类和InvocationHandler这两个类进行接口方法的代理,其具体操作就是利用InvocationHandler实现想要代理的接口方法,然后在Proxy中传入InvocationHandler实例和需要代理的接口,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值