Spring 学习笔记

Spring介绍

在这里插入图片描述
Spring一站式框架
正是因为Spring框架性质是属于容器性质的,容器中装什么对象就有什么功能,所以可以一站式
不仅不排斥其他框架,还能帮其他框架管理对象

  • AOP支持
  • IOC思想
  • Spring JDBC
  • AOP事务
  • Junit测试支持

EE开发结构

  • WEB层:Spring MVC
  • 业务层/Service层:Bean管理:(IOC)
  • 持久层/Dao:Spring的JDBC模板,ORM模板用于整合其他的持久层框架

Spring搭建

导包

  • 基础包
    在这里插入图片描述
  • 日志包
    在这里插入图片描述
  • 可选包
    在这里插入图片描述

创建对象

在这里插入图片描述

书写配置注册对象到容器

位置任意(建议放到src下)
配置文件名任意(建议applicationContext.xml)

  • 导入约束
    在这里插入图片描述

    在这里插入图片描述
  • 测试
    在这里插入图片描述

Spring概念

IOC思想

IOC:Inverse Of Control 控制反转
将我们创建对象的方式反转了,将对象的创建权交给了Spring
以前对象的创建是由开发人员自己维护,包括依赖关系也是自己注入

使用了Spring之后,对象的创建以及依赖关系可以由Spring完成创建以及注入
反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序

DI思想

Dependency Injection 依赖注入
实现IOC思想需要DI做支持

依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入

DI为IOC提供了技术上的支持

注入方式:

  • set方法注入
  • 构造方法注入
  • 字段注入

注入类型:

  • 值类型注入 (8大基本数据类型,配置文件中配置)
  • 引用类型注入 (将依赖对象注入)

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

BeanFactory&ApplicationContext

BeanFactory接口:Spring原始接口.针对原始接口的实现类功能较为单一
BeanFactory接口实现类对应的容器的特点:每次在获得对象时才会创建对象

ApplicationContext接口:每次容器启动时就会创建配置中的所有对象,提供更多功能
从类路径下加载配置文件:ClassPathXmlApplicationContext
从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext(“d:/xxx/yyy/xxx”)

结论:web开发中,使用applicationContext. 在资源匮乏的环境可以使用BeanFactory

Spring配置详解

  • Bean元素
    在这里插入图片描述

  • Spring创建对象的方式

    • 空参构造方式
      在这里插入图片描述
    • 静态工厂(了解)
      在这里插入图片描述
    • 实例工厂(了解)
      在这里插入图片描述
  • Bean元素进阶

    • scope属性
      作用范围在这里插入图片描述

      • singleton(默认值):单例对象.被标识为单例的对象在spring容器中只会存在一个实例(容器启动时创建)
      • prototype:多例原型.被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象.整合struts2时,ActionBean必须配置为多例的.(每次请求都会创建一个Action,ActionBean设成多例)
      • request:web环境下.对象与request生命周期一致.(一次请求过后该对象就会从Spring中移除)
      • session:web环境下,对象与session生命周期一致.(一次会话结束过后该对象就会从Spring中移除)
    • 生命周期属性

      • 配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.
      • init-method
      • 配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.
      • destroy-method
  • Spring分模块配置
    在这里插入图片描述

Spring属性注入

注入方式

set方法注入

在这里插入图片描述

构造函数注入
在这里插入图片描述
p名称空间注入
在这里插入图片描述
spEL注入
在这里插入图片描述

复杂类型注入

  • 数组
    在这里插入图片描述

  • list
    在这里插入图片描述

  • map
    在这里插入图片描述

  • properties
    在这里插入图片描述

在WEB环境中使用Spring容器

  1. 导包 4+2+1(spring-web)
  2. 在web.xml中配置listener => ContextLoaderListener
    配置参数,指定spring配置路径
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 指定加载spring配置文件的位置 -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  1. 在Action中,使用工具类获得容器.
    WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)

使用注解(代替XML)配置Spring

步骤

导包4+2+spring-aop

  1. 为主配置引入新的命名空间(约束)
    在这里插入图片描述
  2. 开启使用注解代理配置文件
    在这里插入图片描述
  3. 在类中使用注解完成配置
    在这里插入图片描述
    将对象注册到容器
    在这里插入图片描述修改对象的作用范围(单例,多例)
    在这里插入图片描述
    值类型注入
    在这里插入图片描述Field赋值直接访问了内部私有成员变量,破坏了封装性(将不希望外界看到的属性私有,值暴露出公有对外操作方法get/set)

引用类型注入
自动装配,合格者装配,手动注入
在这里插入图片描述
初始化/销毁方法
在这里插入图片描述

Spring与Junit整合测试

导包:4+2+aop+test
配置注解
在这里插入图片描述

Spring中的AOP

AOP思想:面向切面编程思想
纵向重复,横向抽取

应用:
页面提交请求servlet接受参数,解决参数乱码问题,将解决乱码的代码抽取放到Filter中
在这里插入图片描述
事务管理中,事务的开启和提交放入代理类InvocationHandler,使用代理技术动态加载到所有的service层(被代理对象)中,形成代理对象
Proxy.newProxyInstance(
classLoader,Interface[] arr , InvocationHandler
);
在这里插入图片描述

拦截器
Interceptors能覆盖到所有的Action,抽取出接受参数的功能放到拦截器

在这里插入图片描述

Spring实现AOP的原理

  • 动态代理
    被代理对象必须要实现接口,才能产生代理对象.如果没有接口将不能使用动态代理技术

  • cglib代理
    第三方代理技术,cglib代理.可以对任何类生成代理.代理的原理是对目标对象进行继承代理. 如果目标对象被final修饰.那么该类无法被cglib代理.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

AOP名词

在这里插入图片描述

Spring的AOP演示

导包:4+2+ +2+2
spring的AOP包
在这里插入图片描述
spring需要的第三方AOP包
在这里插入图片描述

在这里插入图片描述

  • 准备目标对象

在这里插入图片描述

  • 准备通知
    在这里插入图片描述
    在这里插入图片描述

  • 配置进行织入,将通知织入目标对象中

    导入AOP约束


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

注解配置进行织入(了解)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

spring AOP开发

Spring AOP封装了动态代理代码,不需要手写动态代理代码
还封装了cglib代理,都可以对任何类进行代理增强

spring名词
需要增强的代码部分就是通知,在目标对象的方法中,可以被应用通知的方法就是连接点,需要或者已经被织入通知的方法就是切入点,织入后产生的就是代理对象
在这里插入图片描述

Spring整合JDBC

Spring中提供了一个可以控制数据库的对象,对象封装了JDBC技术
JDBCTemplate JDBC模板对象
与DBUtils中的QueryRunner非常相似
导包:4+2+
spring-test+
spring-aop+
junit4类库+
C3p0连接池+
JDBC驱动+
spring-jdbc+
spring-tx(事务包)
在这里插入图片描述
在这里插入图片描述

演示

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Spring配置

在这里插入图片描述

在这里插入图片描述

进阶

JDBCDaoSupport

在这里插入图片描述

  • 读取外部的Properties属性
    在这里插入图片描述

Spring中AOP事务

Spring封装了事务管理代码

  • 事务操作:
    打开事务
    提交事务
    回滚事务

  • 事务操作对象
    因为在不同平台,操作事务的代码各不相同.spring提供了一个接口

  • PlatformTransactionManager 接口不同平台实现类:
    DataSourceTransactionManager
    HibernateTransitionmanager
    注意:在spring的事务管理中.最为核心的对象就是TransactionManager对象

  • Spring管理事务的属性介绍

    • 事务的隔离级别
    1. 1读未提交
    2. 2读已提交
    3. 4可重复读
    4. 8串行化
    • 是否只读
      true
      false

    • 事务的传播行为
      在这里插入图片描述

Spring管理事务方式

编码式

  1. 将核心事务管理器配置到spring容器
    在这里插入图片描述

  2. 配置TransactionTemplate模板
    在这里插入图片描述

  3. 将事务模板注入Service
    在这里插入图片描述

  4. 在Service中调用模板

    在这里插入图片描述

xml配置(aop)

在这里插入图片描述

  • 导包:4+2+aop+aspect+aop联盟+weaving
    在这里插入图片描述

  • 导入新的约束
    在这里插入图片描述
    在这里插入图片描述
    beans: 最基本
    context:读取properties配置
    aop:配置aop (织入)
    tx:配置事务通知

  • 配置通知

    在这里插入图片描述

  • 4.配置将通知织入目标
    在这里插入图片描述

注解配置(aop)

  • 导包和约束同上
    在这里插入图片描述
  • 使用注解,加类上或方法上
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值