1. 何为框架
1.1 何为软件
软件:是程序和文档的一个集合,是用来解决生活中遇到问题。例如:
- 为了方便购物:电子商务系统(京东、天猫)
- 为了解决打车难的问题(滴滴)
- 为了解决最后一公里问题(ofo、摩拜)
从软件编程角度分析,软件具体解决了哪些问题?
- 解决数据输入问题(键盘输入、语音输入)
- 解决数据处理问题(日志记录、存储问题、数据计算、数据推送)
- 解决数据输出问题(数据展现)
站在软件设计的角度,采用哪种方式解决问题会更好?
- 面向过程?(着眼点解决问题的基本算法和步骤)
- 面向对象?(着眼点使用哪些对象解决问题,可能更加符合大众思考点)
在这个过程中,对象如何设计?对象依赖管理,内存管理如何实现?
接口:标准
抽象类:一个标准的非完全实现(半成品)
具体类:接口或者抽象类的一个完美实现(成品)
1.2 何为框架
框架是软件编程中对待特定问题的封装和抽取。是为了降低软件编程难度,提高软件运行性能,提高软件可维护性,可拓展性而推出的一个半成品。例如spring,mybatis
生活中的框架:简历的模板就是构建一份完整简历的框架。
框架应用及设计时应用三个维度进行考虑:
- 面向对象
从静态角度进行分析,把大象放冰箱里,首先考虑有哪些对象(大象),对象有哪些属性与行为,对象与对象之间有什么关系,如何通过这些对象解决对应问题。 - 面向切面
从动态的角度进行分析,对象运行的过程中如何为对象扩展新的业务功能 - 面向服务
微服务:阿里的dubbo, SOA 等等,从服务的角度进行细粒度控制,然后进行RPC调用。
分析现阶段做过的项目?
- 项目采用的什么架构?
- 项目中分了几层,层级之间有什么职责,层级之间如何关联
- 项目中对象创建以及对象的管理如何实现的?
- 项目中的线程安全如何考虑的
…
2. Spring框架
2.1 Spring概述
2.1.1 Spring是什么?
Spring是一个框架,主要是从三个维度(面向对象、面向切面、面向服务)然后通过整合一定的资源解决软件汇总的一些相关问题。
从细节上Spring核心主要解决如下几个问题:
- 对象的创建(通过工厂如何创建?)
- 对象的管理(重点管理对象依赖关系)
- 。。。
回顾之前使用一个对象时,如何创建对象的?
1、直接创建(例如:new Point)
Date date = new Date()
2、通过静态工厂 (例如: Calendar.getInstance())
class DateUtils{
public static Date getInstance(){
return new Date();
}
}
Date date = DateUtils.getInstance()
3、假如不知道有这个类,如何创建?通过动态工厂创建对象(根据配置信息创建对象)
//创建一个beans.xml文件
<?xml version="1.0 encoding="UTF-8">
<beans>
<bean id="date" class="java.util.Date"/>
</beans>
//解析配置文件,基于反射创建、管理对象
/**
* 需求
* 构建ApplicationContext对象时,读取指定的文件(xml),根据配置创建对象,并将对象信息存储到map,需要对象时,从map中获取
* */
public class ApplicationContext{
private static Map<String,Object> beanMap = new HashMap<>(String,Object);
public ApplicationContext(Sring file){
init(file);
}
/**初始化对象,然后存储到map*/
private void init(String file){
//读取指定的文件
//解析对象
//创建对象
//存储对象
}
/**从map中获取对象*/
public Object getBean(String key){
return beanMap.get(key);
}
/**释放资源*/
private void close(){
beanMap.clear();
beanMap = null;
}
}
//通过动态工厂创建对象(根据配置信息创建对象)
ApplicationContext ctx = new ApplicationContext(beans.xml);
Date date3 = (Date)ctx.getBean("date");
ctx.close();