1、Bean的生命周期
2、循环依赖的解决方式
1、实例化和初始化分开,提前暴露对象;
2、三级缓存,暂存半成品对象;
引用链接
3、BeanFactory和ApplicationContext的区别
1、BeanFactory是Spring比较原始的Factory,无法使用Spring的许多插件:如AOP、web应用等;
2、ApplicationContext接口由BeanFactory接口派生而来,在BeanFactory的基础上扩展了很多功能;
3、BeanFactory采用延迟加载(使用时加载),而ApplicationContext默认是启动时一次性加载;
引用链接
3、Spring中用到的设计模式
- 工厂模式
通过 BeanFactory 或 ApplicationContext 创建 bean 对象就使用的是工厂模式; - 单例模式
Spring中bean的默认作用域就是singleton(单例)的;
实现方式:通过ConcurrentHashMap单例注册表来保存所有的单例对象,key是bean的名称,value是对象引用; -
代理模式
AOP都是采用动态代理实现,根据代理对象是否实现了接口来决定采用JDK Proxy还是Cglib来创建代理对象;
AOP将一些通用的功能抽象出来,简化代码,提高系统扩展性;
- 模板方法
模板模式:定义一个方法的实现骨架,将具体的实现放到子类中;使在不改变算法骨架的情况下,重定义某些特殊步骤的实现,也让公共代码得到复用;
Spring中jdbcTemplate这样以Template结尾的数据库操作类都以模板方法来实现;
一般情况下,我们都用继承的方式来实现模板模式,但Spring没有使用这种方式,而是采用CallBack+模板方法结合使用的方式,提供代码复用的效果,增加灵活性;
引用链接 - 观察者模式
Spring中的事件驱动就使用到了观察者模式;
事件体ApplicationEvent、事件监听者ApplicationListener、事件发布者ApplicationEventPublisher
ContextStartedEvent:ApplicationContext 启动后触发的事件;
ContextRefreshedEvent:ApplicationContext 初始化或刷新完成后触发的事件;
ContextClosedEvent:ApplicationContext 关闭后触发的事件。