把以前分享的spring框架整理一份放在这里。html
总体架构:java
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架web
框架图(选自:http://docs.spring.io/spring/docs/3.0.x/reference/overview.html):spring
core Container为spring的核心,实现了基于IoC的bean管理容器。上层的aop /Aspects都是基于他基础上实现的AOP。他们构成了spring的核心功能。编程
在IoC和AOP基础上,咱们有扩展了数据层和web层架构
使用场景:mvc
web应用使用场景:(springmvc + spring)app
rpc应用使用场景:框架
IoC:ui
应用控制反转,对象在被建立的时候,由一个调控系统内全部对象的外界实体,将其所依赖的对象的引用,传递给它。也能够说,依赖被注入到对象中。因此,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
IoC容器框架的类关系:
beanFactory 和 applicationContext的比较,applicationContext支持的功能更多:
applicationContext支持不一样的信息源:ApplicationContext扩展了MessageSource接口,能够支持国际化的实现。
访问资源:ApplicationContext继承了DefaultResourceLoader的子类,提供ResourceLoader和Resource的支持
支持应用事件:ApplicationContext继承了ApplicationEventPublisher接口
applicationContext启动流程(AbstractApplicationContext):
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // Invoke factory processors registered as beans in the context. invokeBeanFactoryPostProcessors(beanFactory); // Register bean processors that intercept bean creation. registerBeanPostProcessors(beanFactory); // Instantiate all remaining (non-lazy-init) singletons. finishBeanFactoryInitialization(beanFactory);
bean介绍:
按照注入bean的种类分类:
分为 普通bean和 FactoryBean
factoryBean 须要实现FactoryBean接口,应用于一个bean做为工厂方法产生不一样的bean实例,经常使用于应用层框架的搭建,能够根据特定条件返回接口的不一样实现
public interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton(); }
bean的资源定义如何载入到容器:
xmlBeanFactory:
public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException { super(parentBeanFactory); this.reader.loadBeanDefinitions(resource); }
applicationContext
编程式获取bean的方法
ApplicationContext context = new ClassPathXmlApplicationContext("JunitNoHsfApplicationContext.xml"); FuwuDao fuwuDao = (FuwuDao)context.getBean("fuwuDao");
Web应用程序bean实例化的配置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application.xml</param-value> </context-param> <context-param> <param-name>${contextClassKey}</param-name> <param-value>com.taobao.data.fmp.spring.FmpApplicationContext</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
bean的注册流程:
如何自定义bean标签
获取bean的流程:
bean的生命周期
生命周期中的扩展
spring在web中如何启动
bean的注解
@Autowired或@Resource
@Component(不推荐使用)、@Repository、@Service、@Controller
注解功能的实现原理
<context:component-scan base-package="com.taobao.data.fmp" />
http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler
AutowiredAnnotationBeanPostProcessor CommondAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor
问题互动:
Bean 的循环依赖会报错吗
如何扩展一个bean的定义标签
Web applicationContext何时实例化 bean
AOP
面向切面编程,经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
实现原理
webx介绍
http://www.openwebx.org/
webx是在spring基础上对标签解析这进行了更一步的扩张,是标签解析和bean载入模式更加灵活