spring框架

什么是spring框架?

Spring框架是一个容器,它是整合其他框架的框架,核心是aop(面向切面)和ioc(控制反转)

面向接口编程:类中的成员变量设计为接口,方法中的参数设计为接口,方法的返回值设计为接口,调用的时候接口指向实现类。使用接口,就是面向灵活,项目的可扩展性,维护性极高,借口不关心实现类的类型,切换实现类就切换了整个功能

Ioc:指将传统上直接由程序代码操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是将对象的控制权转移,由程序代码转移到了外部容器,由容器实现对象的创建,赋值和依赖的管理。【是一个概念,是一种思想,由spring容器进行对对象的创建和依赖注入,程序员在使用的时候可以直接取出来使用。】

目前ioc比较流行的实现方式的依赖注入 DI(Dependency Injection),依赖注入指的是程序运行过程中,如果需要用到另外一个对象时,外部容器会创建好并传递给程序。

正转和反转:

Spring根据代码的功能特点,使用ioc降低业务对象之间的耦合度,使用aop让系统服务得到最大的复用

将公共的重复的通用的代码提取出来单独开发,需要的时候反织回去,就是面向切面编程,底层原理是动态代理。切面集中开发,谁用切面谁拿过去

上下文:对你当前做的事提供的支持都是上下文。

Spring容器是一个超级大工厂,负责创建管理所有的java对象,这些java对象又称为bean。Spring容器管理着容器中bean之间的依赖关系,通过依赖注入方式。

Spring项目创建:创建一个空项目然后修改pom文件,修改文件目录

Spring创建对象:

赋值:【

附:

基于xml的IOC

  1. 创建对象:<bean id = “sss” class=”com.example.pojo.Student”></bean>
  2. 给创建的对象赋值:
  1. 使用setter注入、

注入分为简单型注入和引用型注入(上面)

简单型注入使用value属性

引用型注入使用ref属性

使用setter注入必须提供提供无参构造方法和setXXX()方法。

  1. 使用构造方法注入(下面)
  1. 使用构造方法的参数名称进行注入值

(上面的实体类中没有get和set方法,里面只有一个全参的构造方法和一个toString方法)

(name1是构造方法中的值(构造方法中参数的名称),而不是成员变量中的值)

  1. 使用构造方法参数的下标注入值

  1. 使用构造方法默认的参数顺序注入值

Spring会接管三层架构中哪些对象的创建?

非spring接管下的三层架构项目的构建:

Spring框架接管后的项目:

从下往上进行修改项目,数据访问层->业务逻辑层->界面层

       每次对象创建完之后都去看有没有要被注入的属性,点进那个实现类里面,看有没有成员变量,有就注入,没有就不用。

基于注解的IOC: 也称为DI(Dependency Injection),它是IOC的具体实现的技术。

       基于注解的IOC,必须要在Spring的核心配置文件中添加包扫描

药:创建对象并依赖注入

汤: xml  ---->  注解(annotation)

  1. 创建对象的注解

@Component:可以创建任意对象,创建的对象的名称默认是类名的驼峰命名法,也可以指定@Component(“名字”)

@Controller:专门用来创建控制器的对象(三层架构中的servlet),用来接收用户的请求,返回处理结果给客户端

@Service:专门用来创建业务逻辑层的对象,负责向下访问 数据访问层,返回处理毕的结果给界面层

@Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查所有操作

  1. 依赖注入的注解
  1. 简单类型的注入(8种基本类型+String):

@Value:用来给简单类型注入值

  1. 引用类型的注入

@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的对象进行注入(只有同源类型才可以注入)

什么是同源类型:

  1. 被注入的类型(Student中的school)与注入的类型是完全相同的类型【第28集】
  2. 被注入的类型(Student中的school 父)与注入的类型(子)是父子类【第29集】
  3. 被注入的类型(Student中的schoo 接口l)与注入的类型(实现类)是接口和实现类的类型

注意:在有父子类的情况下,使用按类型注入,就意味着有多个可注入的对象,此时按照名称进行二次筛选,选中与被注入对象相同名称的对象进行注入。

@Autowired + @Qualifier(“名称”):使用名称注入值,从整个Bean工厂中搜索相同名称的对象进行注入(第30集,31集)

注意:如果有父子类的情况下,直接按名称进行注入值。

添加包扫描的方式:

Spring配置文件的拆分:按层拆分;按功能拆分….

Spring配置文件的整合:

  1. 基于xml的:

  1. 基于注解的

基于xml的引用类型的自动注入(第38集)

面向切面编程AOP(第39集开始):

静态代理

多切面的测试

Jdk1.8中default 默认实现,不强制实现

动态代理:

Spring支持的AOP的编程,常用的有以下几种:

Spring原生AOP代码实现案例:

AspectJ框架:

事务:

然后在业务逻辑层添加注解:

发生算数异常不回滚:

Spring的两种事务处理方式:

  1. 注解式的事务:

使用@Transactional注解,可以在类上,也可以在方法上

  1. 声明式事务:

在配置文件中添加一次,整个项目遵循事务的设定

第五个:使用数据库默认的隔离级别  isolation = Isolation.DEFAULT

为什么要添加事务管理器:

事务的传播特性:存在多个事务之间的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值