spring基础笔记

1、spring是什么?
spring是一个轻量级的企业级应用开发的框架,spring的核心是控制反转(IOC)、面向切面编程(AOP)和依赖注入
2、spring入门程序
2.1导入jar
spring的核心配置文件 applicationContext.xml(默认)
作用:用户配置所有的类(对象),这些类可以成为springBean
2.2核心类
ApplicationContext(接口):创建或者获取springBean
3、IOC控制反转
控制反转Inversion of Controll :把对象的创建、初始化、销毁等工作交给spring容器,让spring容器来管理这些对象的生命周期
IOC不是一种技术,而是一种面向对象编程的思想,可以设计出松耦合度、优良的程序
包括:依赖注入DI(核心)依赖查找
4、spring的注入
当实例化某个对象的时候,由外部容器来设置这个对象的属性值
属性值的注入,一定要有对应的set方法
property:当前配置的类的属性
name: 属性的名字 value:注入的值
ref:指向其他bean的id
5、Bean的作用域
作用域 scope
默认为singleton :单例模式。只有一份实例
prototype:原型模式。每次通过spring容器来获取springbean时,容器都会创建一个新的实例进行返回
request:同一请求是同一个实例
session:同一会话是同一个实例
6、spring的装配方式
基于XML配置文件的注解方式
1、必须有setter方法
2、必须有无参构造方法
基于注解的装配方式(常用方式)
把当前注解的类声明为springbean,默认名字为首字母小写的全拼
相当于
@Component 用于管理注解的通用模式
@Repository 用于持久层,表示当前是持久层
@Service 用于服务层,表示当前是服务层
@Controller 用于控制层,表示当前是控制层
@Autowired 通过类型查找匹配,注入属性,回到spring的bean去根据当前配置的对象的类型去查找。局限性:不能有多余一个的实现类
扫描包:

7、AOP
开发时,核心业务代码与系统服务代码是相对独立的。运行时核心业务执行时,拥有系统服务的功能。实现这种效果的技术就是AOP
AOP:面向切面编程,采用的是横向抽取机制,将分散在各个方法上的重复代码提取出来,然后在程序编译或者是运行时,再将这些提取出来的代码运用到需要执行的地方
AOP的本质就是代理。对方法进行增强
JDK的动态代理  基于接口的
CGLIB代理  基于子类的
8、spring AOP面向接口编程
Advice(通知):AOP在特定切点上执行的增强处理。在什么时间点上进行的增强,在方法执行之前?执行之后?抛出异常后?
Pointcut(切点):对那些类、那些方法进行增强。

Aspect切面:通常是一个类,里面定义了通知和切点
AOP = 通知+切点
通知的类型
前通知:方法执行之前
后通知:方法执行以后
返回后通知:成功返回后
异常通知:发生异常后的通知
环绕通知:在方法的执行前后进行增强
PointCut切点
JDKRegexpPatternPointCut 基于正则表达式的切点
AspectJExpressionPointCut 基于AOP的切点表达式

AspectJ开发
配置文件的方式


配置通知类

aop:config
定义切面

定义一个切点使用AspectJ切点表达式 execution(返回类型 方法路径)
:代表任意类型或是类上的所有
“…”:代表任意多个,0~N个都可以
括号前面代表的是方法名
execution(
cn..(…)):返回值类型是任意类型的。cn包下的所有类,不包括子包下的。任意方法,任意参数
id = “cut1”/>
配置前通知 method:增强执行的方法

后通知,又称为最终通知,无论如何都会执行

返回后通知,只有正常返回才执行

异常通知,只有异常抛出时才会执行

环绕通知:在方法的执行前后进行一些增强
= 前通知+返回后通知



spring 和 mybatis整合
整合思想:
mybatis:持久层框架、只进行JDBC的操作
spring:容器,管理类的,并且可以设计为scope为单例。管理会话工厂,声明为springbean ,spring来代理mapper接口的实现类,生命为springbean
会话工厂SqlSessionFactory,特点:一旦创建就一直存在。设置为单例。
mapper动态代理的方式,

读取外部资源文件

需要配置的信息 1、会话工厂 2、mapper代理bean 3、数据库连接池
配置数据库连接池






配置会话工厂

注入数据源

加载mybatis的全局配置文件

批量起别名


配置mapper代理bean,使用包扫描的方式,批量创建mapper的代理bean。 并且bean的名字就是接口的名字,首字母小写

指定mapper接口所在的包路径


注解扫描

spring的声明式事务
xml配置文件方式
spring事务管理的配置
事务管理器 spring的声明式事务

注入数据源


事务的通知

tx:attributes
需要切的方法
propagation=“REQUIRED”:默认值,当前方法必须运行在一个事务中,如果当前没有事务,则会开启一个新的事务,如果有,则直接使用当前的事务
propagation=“SUPPORTS”:当前方法如果运行在事务中,则使用当前的事务;如果当前没有事务,则不使用事务




AOP的事务管理
aop:config
切点
.(…))” id=“cut1”/>

注解事务
开启注解事务

@Transactional 可以注解到方法上,表示当前方法进事务管理
注解到类上,表示当前类所有的方法都进行事务管理
注意:spring的事务管理,一定要对进行事务管理的地方往外抛异常,而不能try…catch,如果想主动地对事务进行回滚,可以往外抛异常throw new RuntimeException()。

你可能感兴趣的:(SSM)