Spring入门
Spring简介概述
Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
Spring的作用
- Spring是一个开元的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入;
- Spring的IOC和AOP应用,将组件的耦合度降至最低,即解耦,便于系统的维护和升级;
- 可以与第三方框架和技术整合应用,可以自由选择技术进行开发。
Spring的常用注解
@Component ----------> 为通用注解
@Repository ----------> 为持久层组件注解
@Service ----------> 为业务层组件注解
@Controller ----------> 为控制层注解
@Scope ----------> 为Bean的作用域注解
@Autowired ----------> 为指定Bean之间依赖关系的注解
@Inject ----------> 为指定Bean之间依赖关系的注解
@Value ----------> 为注入Spring表达式值的注解
@ResponseBody ----------> 为Ajax返回类型的注解
Spring的工作流程
- 同步请求与响应处理(普通浏览器请求,整个页面刷新)
- 异步请求与响应处理(Ajax请求,页面局部刷新)
IoC(控制反转)
简单说就是将对象的创建权由我们手动创建转为由Spring容器去创建对象,将对象存储在Spring容器中,当程序中需要用到该对象的时候,直接从Spring容器中去获取对象即可
依赖注入(DI)
简单来说,一个系统中可能会有成千上万个对象。如果要手工维护它们之间的关系,这是不可想象的。我们可以在Spring的XML文件描述它们之间的关系,由Spring自动来注入它们——比如A类的实例需要B类的实例作为参数set进去。
AOP(面向切面编程)
面向切面编程是一种编程思想,将系统中非核心的业务提取出来,进行单独处理
就以日志系统为例。在执行某个操作前后都需要输出日志,如果手工加代码,那简直太可怕了。而且等代码庞大起来,也是非常难维护的一种情况。这里就需要面向切面来编程
AOP的核心概念
Aspect(切面): 切面,是对交叉业务逻辑的统称。
Joinpoint(连接点): 指切面可以织入到目标对象的位置(方法,属性等)。
Advice(通知): 指切面的具体实现。
Pointcut(切入点): 指通知应用到哪些类的哪些方法或属性之上的规则。
Introduction(引入): 指动态地给一个对象增加方法或属性的一种特殊的通知。
Weaving(织入): 指将通知插入到目标对象。
Target(目标对象): 指需要织入切面的对象。
Proxy(代理对象): 指切面织入目标对象之后形成的对象。
Spring 的事务管理
一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性说成是 ACID:
- 原子性: 事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。、
- 一致性: 这表示数据库的引用完整性的一致性,表中唯一的主键等。
- 隔离性: 可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
- 持久性: 一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。
浅谈Spring的事务管理
Spring提供的事务管理分为两类: 编程式的和声明式的,编程式的比较灵活,但是代码量大,存在重复的代码比较多,声明式的比编程式的更灵活。
- 编程式: 主要使用transactionTemplate.省略了部分的提交,回滚,一系列的事务对象定义,需要注入事务管理对象。
- 声明式: 使用TransactionProxyFactoryBean 围绕Proxy的动态代理,能够自动的提交和回滚事务。
事物拦截器的实现原理。
spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截。在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。