# spring
**Repository Path**: wu_guan_jun/spring
## Basic Information
- **Project Name**: spring
- **Description**: spring入门
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-03-14
- **Last Updated**: 2023-07-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring
#### 介绍
spring入门
#### 什么是Spring框架
它是一个容器,它是整合其它框架的框架,它的核心是Ioc和Aop,它由20多个模块构成,它在很多领域都
都提供优秀的解决方案。之后还会学springmvc,springboot等。
Spring的主要作用是:解耦合,对象和对象(模块和模块)之间不使用代码关联,而是通过配置来说明,即在spring
中说明对象关系。
Spring的特点:
(1)轻量级:由20多个模块构成,每一个jar包都很小,小于1M,核心包也就3M左右,对代码无污染
(2)面向接口编程:使用接口,就是面向灵活,项目的可扩展性,可维护性都极高,接口不用关心实现类的类型
使用时接口指向实现类,切换实现类就是切换功能
(3)AOP面向切面编程:就是将公共的,通用的,重复的代码单独开发,在需要的时候反织回去,底层的原理是动态代理
(4)整合其他框架:它整合后是其他框架更易用
#### 什么是IoC
控制反转IoC是一种概念,是一种思想。由Spring容器进行对象的创建和管理,程序员在使用时直接取出使用。
正转:由程序员进行对象的创建和管理,程序员说了算,比如:
Student stu = new Student();
stu.setName=("张三");
stu.setAge=("张三");
反转:由spring容器进行创建和管理对象
#### spring常用注解
切记:基于注解的IoC,必须要在Spring的核心配置文件添加包扫描
创建对象的注解:
@Component:可以创建任意对象,创建对象的名称默认是对象的驼峰命名,也可以指定对象的名称@Component("指定名称")
@Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求,可以返回处理结果给客户端。
@Service:专门用来创建业务逻辑层的对象,负责向下访问数据层,向上将处理完毕的结果返回给界面层
@Repository:专门用来创建数据层的对象,负责数据库中的增删改查所有操作
创建对象的注解:
值类型的注入:
@Value:专门给简单类型注入值
引用类型的注入:
@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入
@Autowired
@Qualifier:使用名称注入值,从整个Bean工厂中搜索相同的名称的对象进行注入
什么是同源类型:
a.被注入的类型(Student中的school)与注入的类型是完全相同的类型
b.被注入的类型(Student中的school)与注入的类型子类,父子类
b.被注入的类型(Student中的school)与注入的类型是继承关系
#### 什么是AOP
AOP面向切面编程
切面:公共的,通用的,重复的功能称为切面,面向切面编程就是将切面提取出来,单独开发,在需要调用的方法中通过动态代理的方式进行植入
#### 什么是AspectJ框架
AspectJ是一个优秀的面向切面的框架,它扩展了java语言,提供了强大的切面实现。因为它是基于java语言开发,所以无缝扩展
AspectJ常用的通知类型
前置通知@Before
后置通知@AfterReturning
环绕通知@Around
最终通知@After
定义切入点@Pointcut
AspectJ的切入点表达式:
规范的公式
execution(访问权限 方法返回值 方法声明(参数) 异常类型)
简化后的公式
execution( 方法返回值 方法声明(参数))
例:
execution(public * *(..)):任意的公共方法
execution(* set*(..)):任意一个以“set”开始的方法
execution(* com.jun.service.impl.*.*(..)):任意的返回值类型,在com.jun.service.impl包下的任意类的任意方法的任意参数
execution(* com.jun.service..*.*(..)):任意的返回值类型,在com.jun.service包下的任意类的任意方法的任意参数
execution(* ..service.*.*(..)):service之前可以有任意的子包
execution(* *.service.*.*(..)):service之前只有一个子包
#### Spring的两种事务处理方式
(1)注解式的事务
使用@Transactional注解完成事务控制,此注解可添加到类上,对类中所有方法执行事务的设定,此注解可以添加到方法上,只对方法执行事务的处理
(2)声明式事务(必须掌握),在配置文件中添加一次,整个项目遵循事务的设定
要求项目中的方法命名有规范
完成增加操作包含:add ,save ,insert ,set
更新操作包含:update ,change,modify
删除操作包含:delete ,drop,remove ,clear
查询操作包含:select ,find,search ,get
Spring中事务的五大隔离级别
1.未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
2.提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
3.可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读,但是innoDB解决了幻读
4.串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
5.数据库默认的隔离级别isolation = Isolation.DEFAULT;oracle默认的隔离级别是读已提交