文章目录
spring初识
官网:https://spring.io
framework(框架)
通过一系列的类和接口,提供特定的功能,使用框架我们可以更简单的完成某个领域特定的工作。java三层架构,表示层、业务逻辑层,数据访问层。spring属于表示层和业务逻辑层框架,Mybatis属于数据访问层框架。框架可以使我们集中精力域业务逻辑的开发,而不用关心技术的具体实现,比如使用Mybatis框架之后,我们就不用使用jdbc去连接数据库了。
架构发展历史
引用自dubbo背景介绍界面。
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
spring介绍
spring中文文档:https://github.com/DocsHome/spring-docs/blob/master/pages/core/overview.md
Spring是一个轻量级Java开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持(就是可以很方便的集成其他框架)。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。
Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependencyinjection,DI)和面向切面编程(aspect-oriented programming,AOP)。
简略核心解释
spring是一个轻量级的开源框架。
spring为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题
spring是一个IOC和AOP的容器框架。
IOC:控制反转
AOP:面向切面编程
容器:包含并管理应用对象的生命周期
使用spring的优点
1、Spring通过DI、AOP和消除样板式代码来简化企业级Java开发
2、Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,如Web服务REST、移动开发以及NoSQL
3、低侵入式设计,代码的污染极低
4、独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
5、Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
6、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用
7、Spring的ORM和DAO提供了与第三方持久层框架的的良好整合,并简化了底层的数据库访问
8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
9、任何一个语言或者任何一个框架想要立于不败之地,那么很重要的就是它的生态。
IOC(Inversion of Control)
博文:https://blog.csdn.net/ivan820819/article/details/79744797
比如对象A要使用对象B,正常情况下是在对象A中直接new一个对象B,对象B的创建销毁由对象A直接控制,这是一种直接的使用方式。引入IOC之后,对象由第三方容器创建,对象B的控制权由对象A交给了第三方容器,对象A在使用对象B时由第三方容器在程序运行时动态的将某种依赖关系注入到对象A中,此时对象A可以通关第三方容器间接的使用对象B。IOC实现了对象A和对象B之间的解耦合。
优点:避免了因为对象之间耦合度高,出现牵一发而动全身的情况,方便后期系统维护。解耦之后代码的可维护性,灵活性更高。对象的复用,对象A和对象B同时使用到了对象C,从容器中获取,无需创建两个对象C。
缺点:对象之间的调用不太直观,需要项目成员对IOC概念有一定了解。 IOC是通过反射实现的,会造成运行效率的损耗。对于小项目,IOC框架的引入需要大量的配置,可能会加大工作成本。
-
接口分离原则ISP(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来不要将鼠标(具体实现)直接焊在主板上,使用插口(抽象)连接;现在接口有了,但是无法热插拔。 每次鼠标坏了需要关掉电脑才能更换(实现类换了还是需要去变更代码)
UserDao dao=new UserDaoImpl();
- 依赖倒置原则DIP(the Dependency InversionPrinciple DIP)
具体实现依赖抽象。
IUserDao dao=从ioc种获取 涉及到的代码变更极少。
IOC实现
低级:导入jar包,配置xml文件
导入jar包
jar包下载地址:https://repo.spring.io/list/libs-snapshot-local/org/springframework/spring/
spring-context
spring-beans
spring-core
spring-expression
引入xmL
```xml
<?xml version="1.0" encoding="UTF-8"?><bean class="com.blog.dao.impl.UserOrcaleImpl" id="userOracleImpl"></bean>
<bean class="com.blog.service.impl.UserServiceImpl" id="userService">
<property name="userDao" ref="userOracleImpl"></property>
</bean>
```
部分代码
ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("springBean.xml");
UserServiceImpl userService = ioc.getBean(UserServiceImpl.class);
userService.getUser();