没有产品就不存在框架,
先从互联网产品的功能说起:
互联网软件产品的功能概括来讲就是提供一个平台来实现用户和用户之间的在线互动,完成一个特定任务(如:买菜)。这个平台可以运用到各个传统行业-零售、娱乐、政务。
平台功能分解:
用户互动的界面
特定任务的业务逻辑处理
特定任务的业务数据的变更操作、查询操作、保存
用户随时随地接入平台
最高层次的平台架构选择问题:
1、支持用户随时随地接入平台
实际上TCP/IP协议已经成为信息网络节点互联的权威标准,这个其实没有其他选择
2、用户互动的界面,有两种选择用浏览器或者原生库
使用浏览器的优势,用户界面实现和变更非常容易,仅需要更改html元素的组合和布局,并且用户界面变更仅需要平台侧变更
使用原生库的优势,用户界面显示效果好,安全性高
从开发成本和软件功能的可扩展性来看,优先选择浏览器方式开发界面。
3、特定任务的业务数据的管理,大量用户在线查询数据,并产生大量的交易和浏览数据记录需要存储
选择分布式架构(微服务、云)来解决大量用户同时提供服务的问题
选择采用多种数据库系统来解决数据管理的数据的简洁高效访问、全局搜索、数据分析等方面问题
spring框架实现的功能复用:
内部集成web服务器tomcat,复用http协议处理功能
modle、view、controler框架,复用http视图生成逻辑,URL和业务逻辑的映射处理逻辑
安全框架,复用安全过滤处理逻辑
数据库访问接口jpa,复用数据库的CRDU访问接口,数据库链接接口
分布式架构复用
服务注册和发现
服务间通信:同步通信(restful)、异步通信(xxxmq)
服务集中配置服务器
服务多实例的负载均衡(rabbin)
软件功能扩展的角度看
多种系统集成
集成其他系统来扩展原有系统功能,如数据库系统
组件功能扩展
相同组件接口不同具体实现
再原有组件接口上增加附加功能
spring框架实现的功能扩展:
系统集成
数据库系统集成(jpa)接口简单,面向对象模型
其他微服务系统集成,同步接口Restful服务,异步接口xxxmq消息队列
具有20多种已有系统的集成接口,有一套包含网关、通道适配器、内容转换器、路由器组件的统一的集成接口适配模型
组件功能扩展
使用AOP切面方式,增加原有组件的附加功能
A调用B的func的业务接口实现一个功能,可以在B类所有方法增加一个切面,增加日志记录功能,日志功能的增加不需要修改原有A和B的代码,仅需要扩展定义一个Aspect
@Aspect @Pointcut
使用自动装配方式扩展抽象接口的具体实现
controller扩展新的URL和业务逻辑处理的映射
springsecurityConfigerAdapter扩展新的安全策略
使用动态代理方式扩展抽象接口的具体实现
interface productRepository extern CrduRepository<T>
spring框架使用的基础关键技术,是作为容器在对象创建的过程中做了大量的关键处理(如属性自动装配、灵活创建动态代理、创建所有实现相同接口的类对象)
反射: 可以在运行期,打开class文件获取属性和方法,并可以修改属性和执行方法,这样调用构造函数就可以自动创建bean,修改属性就可以自动装配bean,创建bean通过接口类型就可以实现多种实现的对象
动态代理 :通过动态代码动态生成代码类的字节码,原有接口增加新功能就不用写大量的重复代理代码
注解:为注解编写注解解析器,将注解解析器注入到spring框架的bean创建过程,这样再写代码就很省力,仅需要在代码中增加注解,就完成了功能的添加。
spring框架最基础的模型
BeanFactoryPostProcessor职责:进行对象创建前的工厂的前期准备,如扫描和解析注解@configuration,将其包含的bean加入到beandef中。
BeanFactory职责:根据beandef创建bean
BeanPostProcessor职责:生成目标对象的动态代理,自动装配对象的属性