spring学习

IOC的一点认识:

依赖反转模式--把控制权从具体业务对象手中转交到平台或者框架中,是解决面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效的解决方案。

IOC容器:一系列功能各异的容器产品,IoC容器的初始化包括BeanDefinition的Resouce定位、载入和注册这三个基本的过程。

XmlBeanFactory--容器系列的最底层实现,只提供了最基本的IoC容器的功能,可以读取以XML形式定义的BeanDefinition。

public class XmlBeanFactory extends DefaultListableBeanFactory {
	private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
	public XmlBeanFactory(Resource resource) throws BeansException {
		this(resource, null);
	}
	public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
		super(parentBeanFactory);
		this.reader.loadBeanDefinitions(resource);
	}
}

 在XmlBeanFactory构造方法中需要得到Resource对象,对XmlBeanDefinitionReader对象初始化,以及使用这个这个对象来完成loadBeanDefinitions的调用,就是这个调用启动了从Resource中载入BeanDefinitions的过程,这个loadBeanDefinitions同时也是IoC容器初始化的重要组成部分。 

使用 XmlBeanDefinitionReader来载入BeanDefinition到容器中,Spring BeanDefinition的解析是在BeanDefinitionParserDelegate中完成的。根据解析结果,对这些属性值的处理会封装成PropertyValue对象,解析完成以后,把解析结果放到BeanDefinition对象中并设置到BeanDefinitionHolder中去。

经过一层一层的解析,我们在XML文件中定义的BeanDefinition就被整个给载入到了IoC容器中,并在容器中建立了数据映射。在IoC容器中建立了对应的数据结构,或者说可以看成是POJO对象在IoC容器中的映像,这些数据结构可以以AbstractBeanDefinition为入口,让IoC容器执行索引、查询和操作。 

类:

BeanDefinition

AbstractXmlApplicationContext:

BeanDefinitionParserDelegate.parseBeanDefinitionElement();

BeanFactory--实现是IoC容器的基本形式

ApplicationContext--实现是IoC容器的高级表现形式

AOP的认识:AOP实现中,Spring充分利用了IOC容器Proxy代理对象以及AOP拦截器的功能特性,通过这些对AOP基本功能的封装机制,为用户提供了AOP的实现框架。三个主要的步骤,一个是代理对象的生成,然后是拦截器的作用,然后是Aspect编织的实现。

Java 的Proxy机制:

代理对象的生成,有CGLIB和JDK两种生成方式:

AOP拦截器链:

在调用拦截器的时候,我们接下去就可以看到对advice的通知的调用。而经过一系列的注册,适配的过程以后,拦截器在拦截的时候,会调用到预置好的一个通知适配器,设置通知拦截器,这是一系列Spring设计好为通知服务的类的一个,是最终完成通知拦截和实现的地方

相关推荐