目录
一.简介
1.什么是spring?
spring是一个轻量级的,IOC和AOP的一站式java开发框架,简化企业级开发。
轻量级:框架体积小(核心模块)
IOC
即Inversion of Control控制反转.把创建对象的控制权,反转给spring框架。
以前我们在程序中需要对象,都是自己new一个对象(例如:new StudentDao对象)。
AOP
Aspect Oriented Programming 面向切面编程。
将程序中的一些公共的非业务代码分离提取出来,然后在业务代码执行时,给他们横切出来。
使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码会通过代理对象调用非业务代码。
一站式
除了核心的IOC和AOP功能之外,还对数据访问层、web层都有封装,所以时一站式的。
2.Spring 体系结构
官网地址:https://spring.io/
二.Spring Hello World 搭建
1.Maven导入spring核心基础jar
<!-- spring-context--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.2.RELEASE</version> </dependency>
2.编写spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user" class="com.ff.spring.model.User"> </bean> </beans>
3.测试
三.IOC(控制反转)
IOC控制反转:(这是一种设计思想)
把生成对象的控制权,反转给spring框架,spring框架负责管理对象的整个生命周期过程。
对外提供获取对象的方法,我们在程序中哪里需要使用,在哪里获取即可.
四.spring bean管理
bean对象,由于把对象交给spring管理后,spring会对对象进行功能的增强,所以在spring框架中生成的对象,统一称为bean对象。
区分这个对象是我们自己new的还是spring框架生成的。
1.spring中bean管理有两种方式:
(1)基于xml配置方式
(2)基于注解方式
IOC指的是让spring框架创建对象,创建对象的同时,还有一个动作称为依赖注入。
依赖注入:在创建对象的时候,为对象中属性赋值。
2.依赖注入有两种方式:
(1)通过属性注入,属性的set方法

(2)通过构造方法注入
3.(基于xml配置方式)
4.(基于注解方式)
1)开启注解扫描
<context:component-scan base-package="包名"> </context:component-scan>
2)注解创建对象
测试:
5.spring注解方式bean管理(自动注入)
1)@Component(value=“user”)等同于 <beanid=“user” class=“”></bean>
@Service
@Repository
以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不 同的注解标记.
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例
2)@Autowired :是spring框架提供的注解,用于在属性和属性的set方法上。
如果写在属性上,set方法都可以不需要。
默认情况下注入的值不能为空 ,required=true
自动注入有两种值的匹配方式:
①通过属性的类型查找
②通过对象的名字查找,可以结合@Qualifier(value=" ")注解一起使用。
3)@Resource :是Java语言中提供的注解标签,也用于在属性和属性的set方法上。
也是添加在属性上,不需要写set方法。
注入的值不能为空。
也可以通过类型查找要注入的对象 @Resource
也可通过对象名查找 @Resource (name=" ")
6.注解与 XML 的对比
注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点:以硬编码的方式写入到Java 代码中,修改是需要重新编译代码的。
xml 优点是:配置和代码是分离的,在xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。
xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。
五.Spring 数据访问层管理
1)下载Spring jdbc数据访问层jar包
2)spring管理数据库链接对象
3)测试
六.spring集成Mybatis
1.导入mybatisjar包
2.Spring结合mybatis插件包
3.配置
4.测试
七.AOP
1.概述
AOP为AspectOrientedProgramming 的缩写,意为:面向切面编程.
面向切面编程:是对面向对象编程的补充延续。
非业务代码场景:提交事务,打印日志,权限验证,统一异常处理。
面向切面思想是在调用业务代码时,通过一个代理对象帮我们调用提取出来程序中的非业务代码,这样在业务代码中就不用显示的调用非业务代码。这样做到了业务代码和非业务代码的分离,降低了耦合度。
优点:降低了模块之间的耦合度。
原理:动态代理模式给业务代码生成代理对象。
2.AOP的基本概念
连接点:类中可以被增强(加功能)的方法。
切入点:类中实际被增强的方法。(添加、调用了额外功能的方法)
目标(Target): 代理的目标对象。(连接点、切入点所在的类)
代理(Proxy): 向目标对象、应用通知时 创建的代理对象。
通知(Advice):向连接点添加的功能
3.springAOP实现
AOP编程思想是Java中的,不是spring专有的,是spring使用AOP这一编程思想。
1)下载AOP相关jar
<!--spring aop--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.2.2.RELEASE</version> </dependency>
2)基于注解方式的实现,启动AspectJ支持
在spring.xml中配置,开启自动代理
<aop:aspectj-autoproxy/>
3)添加注解
4)添加通知
AspectJ中常用的通知有五种类型:
(1)@Before()前置通知
在业务方法执行之前调用执行
表达式说明:
(2)@After() 后置通知
方法执行之后,无论是否出现异常
(3)@AfterReturnning 返回通知
方法成功执行之后通知,出现异常不执行
(4)@AfterThrowing异常通知
抛出异常之后通知
(5)@Around 环绕通知
方法执行之前、之后、出现异常时添加功能。
八.Spring事务管理
事务管理本质上是数据库提供的一种管理机制。
spring事务管理是spring框架对事务提交这一功能进行封装,程序员在业务开发中不需要显示的提交事务。
1.定义
数据库事务管理就是对一次数据库操作过程中执行的多条语句进行管理,保证一次对数据库的操作过程中多条sql要么都执行成功,要么都不执行,从而确保数据一致性。
案例:转账。
2.Spring 中的事务管理两种形式
一种是编程式事务,一种是声明式事务.
编程式事务在项目中很少使用,这种方式需要在我们代码中需要提交事务或回滚事务时自己写代码实现.
声明式事务:底层使用了AOP思想,可以为方法添加事务功能,它的控制是方法级别的。
3.基于注解实现的spring事务管理
1)在spring.xml中配置
(1)配置事物管理器
<!-- 配置spring 事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="druidDataSource"></property> </bean>
(2)注解方式
<!-- 开启注解事务管理--> <tx:annotation-driven transaction-manager="transactionManager"/>
在类或方法上使用@Transactional标签即可.
2)@Transactional
1.可以添加在方法上,也可以添加到类上面。
如果添加到类上面,此类中所有的方法都在spring事务管理中进行。
(加在Service)
4.声明式事务不生效的场景
(1)@Transactional 应用在非 public 修饰的方法上
(2)异常被catch捕获,认为方法没有异常
(3)方法中出现编译期异常,还是会提交事务
rollbackFor = Exception.class -->可以让所有异常回滚
(4)数据库引擎不支持事,mysql中只有innodb引擎支持事务