Spring知识点总结

本文深入探讨了Spring框架的核心概念,包括IOC容器、AOP编程、事务管理以及Spring的主要模块,如Core、Context、AOP、DAO等。通过分析,揭示了Spring如何简化Java开发并提高代码复用性,以及Spring在事务处理、日志记录、安全性等方面的应用。同时,文章介绍了Spring中Bean的作用域、依赖注入的方式以及不同类型的配置方式。
摘要由CSDN通过智能技术生成

1、 什么是Spring框架?使用Spring框架能带来哪些好处?Spring框架有哪些主要模块?

Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

为什么说Spring是一个一站式的轻量级开源框架呢?
JavaEE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。
• WEB层:SpringMVC
• 业务层:Spring的IOC、AOP
• 持久层:Spring的JDBCTemplate(Spring的JDBC模板,ORM模板用于整合其他的持久层框架)

Spring帮助开发者解决了开发中基础性的问题,使得开 发人员可以专注于应用程序的开发。
Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境 中安心的集成Spr ing框架,不必担心Spr ing是如何在后台进行工作的。
在这里插入图片描述

主要模块:
Spring Core:核心类库,提供IOC服务;
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);
Spring AOP:AOP服务;
Spring DAO:指示你写 DAO 操作、写好 DAO 操作的一些规范,@Repository 对其进行注解,对JDBC的抽象,简化了数据访问异常的处理;
Spring-JDBC: 提供了 Jdbc 模板类,它移除了连接代码以帮你专注于 SQL 查询和相关参数,对你的 DAO 进行扩展开发
Spring ORM:对现有的ORM框架(JPA,JDO,Hibernate,iBatis)的支持;
Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;
Spring MVC:提供面向Web应用的Model-View-Controller实现

(1)核心容器:包括Core、Beans、Context、EL 模块。
Core 模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。

Beans 模块:提供了框架的基础部分,包括反转控制和依赖注入。其中Bean Factory 是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory 来维护。

Context 模块:以Core 和Beans 为基础,集成Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等;核心接口是ApplicationContext。

EL 模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

(2)AOP、Aspects 模块:
AOP 模块:Spring AOP 模块提供了符合 AOP Alliance 规范的面向方面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。

Aspects 模块:提供了对AspectJ 的集成,AspectJ 提供了比Spring ASP 更强大的功能。
数据访问/集成模块:该模块包括了JDBC、ORM、OXM、JMS 和事务管理。事务模块:该模块用于Spring 管理事务,只要是Spring 管理对象都能得到Spring 管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。

(3)Data Access
JDBC 模块:提供了一个JBDC 的样例模板,使用这些模板能消除传统冗长的JDBC 编码还有必须的事务控制,而且能享受到Spring 管理事务的好处。

ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、MyBatis 等。而且可以使用Spring 事务管理,无需额外控制事务。

OXM 模块:提供了一个对Object/XML 映射实现,将java 对象映射成XML 数据,或者将XML 数据映射成java对象,Object/XML 映射实现包括JAXB、Castor、XMLBeans 和XStream。

JMS 模块:用于JMS(Java Messaging Service),提供一套 “消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

(4)Web/Remoting 模块:Web/Remoting 模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet 模块。

Web 模块:提供了基础的web 功能。例如多文件上传、集成IoC 容器、远程过程访问(RMI、Hessian、Burlap)以及Web Service 支持,并提供一个RestTemplate 类来提供方便的Restful services 访问。

Web-Servlet 模块:提供了一个Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP 标签,完全无缝与Spring 其他技术协作。

Web-Struts 模块:提供了与Struts 无缝集成,Struts1.x 和Struts2.x 都支持

Test 模块: Spring 支持Junit 和TestNG 测试框架,而且还额外提供了一些基于Spring 的测试功能,比如在测试Web 框架时,模拟Http 请求的功能。

2、什么是AOP(Aspect Oriented Programming)编程?主要应用在那些方面?

AOP(Aspect Oriented Programming)编程:
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立,然后切入到业务逻辑的中,进而改 变这些行为的时候不影响业务逻辑的代码,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP不是一种技术,实际上是编程思想。凡是符合AOP思想的技术,都可以看成是AOP的实现。

主要的应用:日志记录,性能统计,安全控制,事务处理,异常处理等等。

3、AOP涉及的概念?

关注点:
关注点,重复代码就叫做关注点;
切面:
关注点形成的类,就叫切面(类)!面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。
切入点:
是一个或一组连接点,通知将在这些位置执行,执行目标对象方法,动态植入切面代码。可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码
连接点:
被拦截到的点,因为Spring 只支持方法类型的连接点,所以在Spring 中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。
织入:
是将切面应用到其他应用类型或对象连接或创建一个被通知对象的过程。织入可以在编译时,加载时,或运行时完成。

4、核心关注点和横切关注点区别?

业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

5、关注点和横切关注的区别?

关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。

6、AOP底层实现原理?

用代理模式,通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。
代理参考:代理模式

7、事务基本特性

⑴ 原子性(Atomicity)
  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

⑶ 隔离性(Isolation)
  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
  关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

8、spring事务传播行为

在这里插入图片描述

9、什么是Spring IOC 容器?IOC 的优点是什么?原理实现?

IOC 控制反转:Spring IOC 负责创建对象,通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI 查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC 容器支持加载服务时的饿汉式初始化和懒加载。

使用反射机制+XML技术实现
在这里插入图片描述

在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。

10、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

答:XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束,其本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,而且可以为XML承载的数据定义类型,约束能力较之DTD更强大。对XML的解析主要有DOM(文档对象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java 6中引入的新的解析XML的方式,Streaming API for XML),其中DOM处理大型文件时其性能下降的非常厉害,这个问题是由DOM树结构占用的内存较多造成的,而且DOM解析方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值