先对spring进行一个大概的概述
BeanFactory和ApplicationContext的区别
- ApplicationContext在BeanFactory的上层,ApplicationContext面向程序员、BeanFactory面向spring。
- BeanFactory是懒加载的,而ApplicationContext是非懒加载的(可以设置为懒加载)。
IOC容器
- ioc和di,控制反转和依赖注入,简单的说就是把bean交给spring容器管理。
bean的作用域
- 单例:singleton
- 多例:prototype
- 同一请求:request
- 同一会话:session
在bean的上面使用注解@scope()指定bean的作用域,一般只用到单例和多例。单例模式生命周期由spring容器完全管理,多例bean由GC负责回收。
单例模式可以解决循环依赖问题,多例不能,因为单例bean是由spring管理的,会放入spring的缓存中,spring利用三级缓存解决bean的循环依赖问题。
Bean的生命周期
创建——初始化——销毁方法。
- 从getBean()方法开始。
- 调用InstantiationAwareBeanPostProcessor的PostProcessBeforeInstanstation()方法。
- 实例化
- 调用InstantiationAwareBeanPostProcessor的PostProcessAfterInstanstation()方法。
- 调用InstantiationAwareBeanPostProcessor的PostProcessPropertoesValue()方法。
- 设置属性值
- 调用BeanNameAware的setBeanName()方法
- 调用BeanNameAware的setBeanFactory()方法
- (ApplicationContext中的bean会多下个步骤)
- 调用ApplicationContextAware的setApplicationContext()方法
- 调用BeanPostProcessor的postProcessBeforeIntialization()方法
- 调用InitializingBean的afterPropertiesSet()方法
- 调用通过init-method属性配置的初始化方法
- 调用BeanPostProcessor的postProcessAfterIntialization()
- 如果是单例模式
- 放入spring缓存池
- 容器销毁,调用DisposableBean的destroy()方法。
- 通过destroy-method属性配置的销毁方法。
后处理器
- spring提供InstantiationAwareBeanPostProcesser和BeanPostProcessor两个接口实现很多的后处理器,可以有多个后处理器,这些后处理器都会执行。
spring aop
- spring aop就是通过BeanPostProcessor这个接口实现的。
spring中的设计模式
- 责任链模式:aop中体现
- 策略模式:加载资源的时候,通过传入资源资质信息,自动选择适合的底层资源实现类。
- 工厂模式:工厂bean
- 单例模式:bean单例
- 观察者模式:监听器
spring中的一些常用注解
- @Import()注册bean、注册第三方bean
- @Lazy()懒加载
- @scope() bean的作用域
- @PreDestroy()在destroy()方法执行之后执行 JSR250规范
- @Order 加载权重
- @PostConstrut将会在依赖注入完成后被自动调用。init初始化之前执行,只执行一次。JSR250规范
- @Service
- @Rconfiguration
- @Autowired
- @Resource
spring中的一些重要组件
- BeanPostProcessor:实现aop
- BeanDefinition:bean定义
- FactoryBean:工厂类
- InsantiationStrategy:创建bean实例
- BeanWrapper:代理类,spring使用这个代理类对bean进行属性填充
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。