1
先对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进行属性填充

李沁春
17 声望1 粉丝

喜欢运动,骑行、打羽毛球、打乒乓球等。也喜欢打桌游,玩狼人杀、剧本杀等烧脑游戏。


« 上一篇
Java NIO
下一篇 »
spring源码解读