Spring:基本概念
Spring是一款全栈式轻量级开源框架,主要解决的是程序间耦合的问题。
两大核心:
- 控制反转IOC
- 面向切面编程AOP
能够整合众多著名的第三方框架和类库。是实际开发中使用最多的企业应用级开源框架。
2017年9月发布了spring的最新版本spring5.0通用版
spring并不能帮你解决具体的代码问题,spring的优势在于:
- 方便解耦,简化开发
- AOP编程的支持
- 声明式事务的支持
- 方便程序的测试
- 方便集成各种优秀框架
- 降低JavaEE API的使用难度
- spring的java源码是经典学习案例,设计精妙
Spring体系结构
其他部分的运行都要依赖于Core Container,即核心容器IoC。
程序间的耦合
耦合:简单来说就是程序间的依赖关系,包括
- 类之间的依赖
- 方法之间的依赖
解耦:降低程序之间的依赖关系。实际开发中应该做到:编译期不依赖,运行时才依赖。
类依赖的解耦思路举例:
- 第一步:使用反射来创建对象,而避免使用new关键字,比如在注册数据库驱动时:
- 如果是用DriverManager.registerDriver(new com.mysql.jdbc.Driver),就会导致类之间的依赖
- 而如果使用Class.forName("com.mysql.jdbc.Driver")来注册驱动,那么依赖的就只是一个字符串。但是这种方式也会导致字符串内容被写死。
- 第二步:通过读取配置文件来获取要创建对象的全限定类名,解决写死的问题。
控制反转(IOC)
含义是把创建对象的控制权交给了工厂,所以叫控制反转,它降低了程序中类之间的耦合。
面向切面编程(AOP)
AOP(Aspect Oriented Programming):面向切面编程。简单来说就是把各个业务逻辑代码中重复的部分独立出来,以此来降低各业务逻辑之间的耦合性,主要解决的是方法之间的耦合问题。
aop的主要实现技术:动态代理,对已有方法进行统一增强。spring会根据是否实现了接口来自动选择用哪种代理方式。
切面是指切入点和通知/增强的结合。
- 切入点:被加入拦截的连接点(即加入拦截的方法)
- 通知:即在代码增强时所执行的代码,这些代码通常都是来自一个通知类(实现公共代码的类)。
- 前置通知
- 后置通知
- 异常通知
- 最终通知
- 环绕通知
Spring的声明式事务控制
javaee体系是进行分层开发的,事务会交由业务层来控制。spring框架为我们提供了一组事务控制的接口,并且它的事务控制是基于aop的,既可以用编程的方式来实现,也可以通过配置来实现。