spring整理复习
# spring使用流程
? 首先创建一个spring对象,他要读取spring的配置文件,
? sping配置文件里面要写对象名字就是id和类路劲
? 来创建对象,他把创建好的对象放进容器里
## 使用:
使用这个对象的getben方法。获取创建好的对象
# 创建:
```
# 使用的是无参构造方法创建
# 用的是动态代理实现
```
# 设值注入:
##
## 本质:
```
就是创建对象时给属性赋值
```
### 设值注入的分类:
```
#set注入 调用类中的set方法赋值(使用较多)
#构造注入 调用类中的有参构造方法赋值
```
### 设值注入的实现分类
```
#基于xml文件的依赖注入方式(基于xml的di):使用配置文件的标签属性实现
#基于注解方式的依赖注入方式(基于注解的di):使用注解
```
##
## 基于xml文件的set方式注入
```xml
bean标签中使用property标签就是set注入
property:属性
给对象属性赋值,你得创建对象才能赋值给对象属性吧?
首先给一个有属性是对象类型的对象:
```
## !!1基于xml文件的构造方法注入:
```xml
如上。只不过标签换成了constructor
constructor:构造方法 亢四chua客t
name:表示构造方法的形参名
index:表示构造方法参数位置,从左往右 从0开始
value:简单类型用value
ref:引用类型用ref
```
### 1.构造注入创建文件对象 (举一反三,就看类属性赋什么值就完事了)
```xml
```
###
## 引用类型的自动设值注入:
```xml
作用:就是你在赋值引用类型对象时,不用自己在赋值了,直接框架自动注入
分类:
1:byname
2:bytype
autowire翻译:自动装配
byname演示
byType演示
```
## 多配置文件
```xml
多配置文件的好处
1:每个文件小很多,效率高。、
2:避免多人竞争
多配置文件的分类:
1:按功能,一个模块一个配置文件
2:按类的功能:数据库一个配置文件。做事务的一个配置文件
```
```xml
包含关系的配置文件:
spring-total表示主配置文件:包含其他配置文件,一般不定义对象
语法:
关键字:classpath:表示类路径(class文件所在的目录),
spring的配置文件中要制定其他文件的位置,需要使用classpath告诉他加载类路劲
```
## !!2基于注解方式的设值注入(di)
```
使用步骤:
1,加入maven的依赖,spring-context,再加入这个的依赖时就加入了aop的依赖
使用注解必须使用spring-aop依赖
2,在类中加入spring注解
3.在spring配置文件中加入组建扫描器,告诉spring注解项目位置
```
```
要学习的注解:
1,@component(创建对象)
2.@respotory(创建持久层类上面:放在dao的实现类上面。)
3.@service(业务层,业务处理,像事务啊这种的。)
4.@Contorller(控制器,能够接受用户提交的参数,和显示请求处理结果)
5.@value
6.@Autowired
7.@Resource
```
# @Component注解
```xml
component:组成,成分 它是用来创建对象的
创建对象的等同于
value是对象名称,也就是bean中的id值
这个值一定是唯一的,spring容器中就一个
@Component(value="mystudent")等于
这个value可以省略
对象名为类名首字母小写
```
## 赋值:
## 1,简单类型赋值
```java
简单类型赋值两种位置赋值:
1,在属性定义上赋值,无需set方法
@value(value='xxx')
private String name;
2,在set方法上赋值
@value(value='xxx')
public void setName(String name){
this.name=name;
}
```
## 2,引用类型赋值:
### 1,autowried方式
```
引用类型使用的是
@AutoWired注解
使用的是自动注入原理(默认是byType)
注入方式有:byType和byName
注意:如果你非要用byName的方式。那么就需要这样写
@Autowired
@Qualifier("名字")
Qualifier:翻译为限定符
注解位置:
1,属性定义上面
2,set方法上面
AutoWired中的required属性:
required翻译:必须的,规定的 瑞快尔
他的值为fales/true
Autowried(required=flase):表示程序正常执行,引用类型是null
Autowried(required=ture):表示引用类型赋值失败时程序终止,报错
```
### 2,jdk提供的方式:
```java
@resource:
来自jdk提供,spring框架提供了该功能支持,
默认使用byName方式注入,如果注入失败那么就使用byType
如果只想让它使用byName方式需要加个属性 :nane (name的值是bean的id)
只使用byName
@resource(name='bean的id')就是对象的名字
```
## 注解解耦合
```properties
name=张三
age=24
```
```xml
1,事物隔离级别(4个值)
default:使用数据库默认事物隔离级别。mysql默认为:REPEATBLE_READ
oracle默认为READ_COMMITTED
READ_UNCOMMITTED(uncommitted:未提交):读未提交,未解决任何并发问题
READ_COMMITTED(committed:commit):读已提交,解决脏读,存在不开重复读和幻读
REPETATBLE_READ(repe:重复):可重复读,解决脏读,不可重复读,存在幻读
SERIALIZABLE(serializable:可串行化,序列化):串行化,不存在并非问题。
2,事物超时时间
表示一个方法最多执行时间,如果方法执行超过了时间,事物就回滚
单位是秒,整数值,默认是-1
3,事物的传播行为
控制业务方法是不是有事物的,是什么样的事物,
7个传播行为,表示你的业务方法调用时,事物在方法之间是如何使用的
PROPAGATION_REQUIRED(propagation:传播 读音:爬波key生
required:必须,必读读音:瑞快尔的):
有事务时就加入事务,无事务时就创建新的事务
PROPAGATION_REQUIRED_NEW():就是说无论如何都是新建事务,如果有事务,那么就挂起已有的事务 ,直到执行完新建的事务
PROPAGATION_SUPPORTS(supports:支持忍受 读音:四破四):就是说支持事务,
但是没有事务事务时也可以以非事务执行。就比如select语句就可以不用事务
还有其他四个
3)事物提交事物,回滚事务的时机
1,当你的方法执行成功,没有异常抛出,方法执行完成,spring在方法执行后提交事物,事务管理器commit
2,当你的业务方法抛出运行时异常或error,spring执行回滚,调用事物管理器的rollback
运行时异常定义:runtimeException,和他的子类都是运行时异常,比如空指针异常,数字格式异常
3,当你的业务方法抛出非运行时异常,主要是受查异常时,提交事物
受查异常,在你写代码中,必须处理的异常。ioException。sqlException
```
## 注解依赖
```
spring框架提供事物处理方案
1,适合中小项目使用,注解方案。
spring使用的是aop实现业务方法增加事物的功能,使用Transactional(事物处理)
位置:public方法上面,表示当前方法具有事物。
值:可以给注解的属性赋值,表示具体的隔离级别,传播行为,异常信息等等
```
### 使用步骤
```XML
1,声明事物管理器对象
```
```JAVA
2,在需要事物的方法上加@Trancational
可选属性:
propagation:用于设置事物传播属性。该属性类型为isolation(隔离)枚举类型 、
默认值为PROPAGATION_REQUIRED
readOnly:用于设置该方法对数据库的操作是否是只读,该属性是boolean 默认值为false
timeout:用于设置本操作与数据库连接的超时时限。单位为秒,类型为int,默认值为-1,就是没有时限
rollbackFor:指定需要回滚的异常类,类型为Class[],默认值为空数组,当然,
若只有一个异常类时,可以不使用数组
rollbackForClassName:指定需要回滚的异常类类名,类型为String[],默认值为空数组。
当然只有一个异常类时,可以不使用数组
noRollbackFor:制定不需要回滚的异常类。类型为classp[],默认为空数组,当然只有一个类时,可以不用数组
noRollbackForClassName:制定不需要回滚的异常类类名,类型为string[],默认为空数组,只有一个异常类
可以不使用数组
```
```java
Transactional:事务处理
3,开启事物注解驱动
@Around环绕
Object one(){
try{
buy();
事物管理.commit();
}catch(Excetion e){
事物管理.rollback();
}
}
```
## XML方式
```xml
1)maven依赖
2)声明事物管理器对象
3)声明方法需要的事物类型(配置方法的事物属性[隔离级别,传播行为,超时])
attribuites:属性 读音:啊吹biu四
4)配置aop:制定哪些类需要创建代理
配置增强器
```