Spring总结
Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
web层:struts,spring-MVC
service层:spring
dao层:hibernate,mybatis , jdbcTemplate
一、Spring的优点
方便解耦,简化开发(高内聚低耦合)
•Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
•spring工厂是用于生成bean
AOP编程的支持
•Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
•只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
•Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
•Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
•Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
二、Spring体系结构
Spring框架整体被分为五个模块:核心容器(core container), 面向切面编程(aop), 数据访问(date access), web, test.
core
core部分包含4个模块
spring-core:依赖注入IoC与DI的最基本实现
spring-beans:Bean工厂与bean的装配
spring-context:spring的context上下文即IoC容器
spring-expression:spring表达式语言
三、IOC控制反转
https://blog.csdn.net/Sxx312/article/details/88933374
Inversion of control(控制反转), 从字面上来理解: 当一个对象创建时, 它所依赖的对象由外部传递给他, 而非自己去创建所依赖的对象(比如通过new操作). 因此,也可以说在对象如何获取他所依赖的对象这件事情上, 控制权反转了.
IOC的底层原理
Xml解析、工厂设计模式、单例模式、反射
四、DI依赖注入
Dependency injection.
什么是依赖? 一个对象完成业务功能需要依赖另一个对象,比如service功能需要依赖于dao
什么是注入? 就是在获取一个对象时,该对象所依赖的实例已经由spring替我们分配了
五、AOP面向切面编程
https://blog.csdn.net/Sxx312/article/details/88936128
https://blog.csdn.net/Sxx312/article/details/88935045
AOP的OOP的延续,是spring框架中的一个热点和优势,利用AOP可以对业务的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低.提高代码的复用性,同时提高开发效率
AOP采取了横向抽取的机制,取代了传统纵向继承体系的重复性代码
应用场景:日志, 事务管理, 缓存, 性能检测。
Authentication 权限
Error handling 错误处理
Lazy loading 懒加载
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Resource pooling 资源池
Synchronization 同步
Transactions 事务
Spring AOP 使用纯java实现,不需要专门的编译过程和类加载器,在运行期通过动态代理的方式向目标类织入增强代码
Aspectj 是一个基于java语言的AOP框架,从spring2.0开始,引入了对于Aspectj的支持
AOP的专有名词
JoinPoint(连接点)在应用执行过程中能够插入切面的一个点,这个点可以是调用方法时、抛出异常时甚至是修改一个字段。
PointCut(切点),切点缩小切面所通知的连接点的范围,它的定义会匹配通知所要织入的一个或多个连接点。
Advice(通知),在切点干什么,指定在PointCut地方做什么事情(增强),打日志、执行缓存、处理异常等等。
Advisor/Aspect(切面),切面是切点和通知的结合。切点和通知共同定义了切面的全部内容——它是什么,在何时何处完成什么功能。
Proxy (代理),其不能算做AOP的家庭成员,更相当于一个管理部门,它管理 了AOP的如何融入OOP。之所以将其放在这里,是因为Aspect虽然是面向切面核心思想的重要组成部分,但其思想的践行者却是Proxy,也是实现AOP的难点与核心据在。我们常说的代理包括静态代理、动态代理和基于CGLib代理,关于代理的知识请自行学习。
Weaving(织入): 组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
六、Spring的事务管理