Spring学习笔记
Posted 艾斯利文
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习笔记相关的知识,希望对你有一定的参考价值。
Spring学习笔记(一)
因为最近在看《Spring 技术内幕-深入解析Spring 架构与设计原理》,相当于做了个笔记,以及把自己理解的东西记录下来。
Spring整体架构图
1.Spring子项目
1.1 Spring Framework (Core)
Spring项目的核心,其中包含IOC容器,提供依赖反转模式实现。
同时,还包括AOP功能,面向切面变成,是对oop(面向对象编程的补充),如spring的日志、事物等都是通过AOP来实现。
还包含了其他的模块,如MVC、JDBC、事物的处理等。
1.2 Spring Security:安全认证的工具,就和Shiro作用差不多。
1.3 Spring Web Flow:在Spring MVC基础上的工作流引擎。
1.4 Spring AMQP: 为了spring更好的根据AMQP(高级消息队列协议)的消息服务而开发。如SpringSource旗下的 Rabbit MQ就是一个开源的基于AMQP的消息服务器。
1.5 Spring Data:处理非关系型数据库。里面封装了JDBC。还提供了对ORM工具的封装,如可以集成Hibernatei、mybatis等。
还有一些其他的系项目就不一一介绍了。
2.Spring设计目标:
Spring体系的核心就是IOC容器和AOP模块。它通过IOC来管理POJO对象,以及它们之间的耦合关系。另一方面,通过AOP,可以动态的非侵入式的方式来增强服务的功能。
如增加日志、事物等。
什么是非侵入事的方式呢?
侵入性强指的是耦合太强了.判断的标准就是当引入了这个组件导致其它代码或者设计要做相应的更改以适应新组件.这样的情况我们就认为这个新组件具有侵入性。
AOP集成了AspectJ框架。同时也有ProxyFactory的代理工程模式。而代理模式的实现中;有JVM动态代理和CGLIB的实现。
面试题:AOP用到了什么技术? JVM动态代理技术和CGLIB代理。
Spring 的设计理念就是,面向接口开发而不依赖与具体的产品实现。
解耦。
3.Spring整体架构
Spring IOC:包含了基本的IOC容易BeanFactory的接口与实现(Bean工厂模式)。除了最基本的BeanFactory容易形态外,还有ApplicationContext的高级形态。
这些ApplicationContext应用上下文,如FileSystemXmlApplicatonContext、ClassPathXmlApplicationContext。为了方便开发,像国际化消息源和应用支持事件这些特性。也
在这里配合IOC容器来实现。
Spring AOP:在JVM动态代理和CGLIB的基础上,实现的AOP框架。作为Spring集成其他模块的工具。比如:TransactionPorxyFactoryBean声明式事物处理,就是通过AOP集成到Spring中的。
Spring MVC:这个模块以DispetcherServlet为核心,实现了MVC模式。包括怎样与web容器环境的集成,web请求的拦截、分发,处理ModelAndView的返回。以及集成各种UI视图展现和数据表现。如PDF、Excel等。通过这个模块可以完成web的前端设计。
Spring JDBC/Spring ORM:对JDBC做了封装,处理数据层操作。还提供了ORM工具的封装,集成ORM工具,如Hibernate、mybatis等。
Spring事物处理:通过AOP实现的事务处理。完成了事物和具体业务的的解耦。如配置事物的拦截器,结合事物配置的属性,对事物对象处理,如事物的创建、挂起、提交、回滚等基本过程。具体的事务处理器,如;DataSourceTransactionManager,HibernateTransactionManager,JtaTranscationManager等。封装了不同的事物处理机制(JDBC、Hibernate/JTA等)。
Spring远端调用:可以解耦以后将应用模块分布式部署,提供系统整体的性能。这这种场景下,会用到。提供Spring应用到Spring应用之间的端到端的调用。
Spring应用:如对各种J2EE实现规范的接口,JMS、JNID、JMX、JavaMail等的支持。通过这个模块,可以容纳第三方的技术。
4.Spring应用场景
Spring提供的服务,可以贯穿应用的整个软件中,从表现层的Spring MVC、业务层的事物处理、数据层的Spring JDBC。也可以单独使用其中的某个模块,只要引入相应的jar包就可以。
以上是关于Spring学习笔记的主要内容,如果未能解决你的问题,请参考以下文章