第一部分:课程总结串讲
    任务一
    一 Spring概述
    spring是一款 full-stack 轻量级开源框架
    因为可以整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架
    IOC
    控制反转
    AOP
    面向切面编程
    优势
    方便解耦,简化开发
    AOP编程的支持
    声明式事务的支持
    方便程序的测试
    方便集成各种优秀框架
    降低JavaEE API的使用难度
    Java源码经典学习范例
    二 初识IOC
    控制反转(Inverse Of Control)是一种设计思想。它的目的是指导我们设计出更加松耦合的程序。
    控制:在java中指的是对象的控制权限(创建、销毁)
    反转:指的是对象控制权由原来 由开发者在类中手动控制 反转到 由Spring容器控制
    自定义IOC容器
    配置文件 + BeanFactory
    解耦合的原则是编译期不依赖,而运行期依赖就行了。
    三 Spring快速入门

    1. 实现步骤
    2. 1. 创建java项目,导入spring开发基本坐标
    3. 2. 编写Dao接口和实现类
    4. 3. 创建spring核心配置文件
    5. 4. spring配置文件中配置 UserDaoImpl
    6. 5. 使用spring相关API获得Bean实例
    7. Spring相关API
    8. BeanFactory
    9. IOC 容器的核心接口,它定义了IOC的基本功能。
    10. 特点:在第一次调用getBean()方法时,创建指定对象的实例

    BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(“applicationContext.xml”));

    1. ApplicationContext
    2. 代表应用上下文对象,可以获得springIOC容器的Bean对象。

    特点:在spring容器启动时,加载并创建所有对象的实例
    常用实现类
    1. ClassPathXmlApplicationContext: 它是从类的根路径下加载配置文件 推荐使用这种。
    2. FileSystemXmlApplicationContext : 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
    3. AnnotationConfigApplicationContext: 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
    常用方法
    1. Object getBean(String name);
    根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
    2. T getBean(Class requiredType);
    根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。
    3. T getBean(String name,Class requiredType);
    根据Bean的id和类型获得Bean实例,解决容器中相同类型Bean有多个情况。
    五 Spring配置文件
    5.1 Bean标签基本配置
    id:Bean实例在Spring容器中的唯一标识
    class:Bean的全限定名
    5.2 Bean标签范围配置
    scope
    singleton
    对象创建:当应用加载,创建容器时,对象就被创建了
    对象运行:只要容器在,对象一直活着
    对象销毁:当应用卸载,销毁容器时,对象就被销毁了
    prototype
    对象创建:当使用对象时,创建新的对象实例
    对象运行:只要对象在使用中,就一直活着
    对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
    5.3 Bean生命周期配置
    init-method 指定类中的初始化方法名称
    destroy-method 指定类中销毁方法名称
    5.4 Bean实例化三种方式
    无参构造方法
    工厂静态方法 (针对于Jar包中的类)
    工厂实例方法
    5.5 Bean依赖注入概述
    通过框架把持久层对象传入业务层,而不用我们自己去获取。
    依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。
    5.6 Bean依赖注入方式
    构造方法

    set方法

    p命名空间

    5.7 Bean依赖注入的数据类型
    简单数据类型
    引用数据类型
    集合数据类型
    list
    set
    array
    map
    properties
    5.8 配置文件模块化
    主从配置

    拆分方式:
    按层进行拆分
    按模块拆分
    六 DbUtils(IOC实战)
    介绍
    DbUtils是Apache一款用于简化jdbc操作的工具类
    核心对象
    QueryRunner queryRunner = new QueryRunner(DataSource dataSource);
    核心方法
    int update();
    DML类型
    T query();
    DQL类型
    Spring的xml整合DbUtils
    spring整合第三方数据源
    Druid
    spring整合DbUtils
    QueryRunner
    加载第三方配置文件

    七 Spring注解开发
    常用注解
    IOC
    @Component
    @Controller
    @Service
    @Repository
    DI
    @Autowired
    根据类型
    @Qualifier
    在@Autowired基础上+id
    @Resource
    @Autowired + @Qualifier
    @Value
    通过SPEL表达式,获取第三方配置文件的值
    生命周期
    @Scope
    作用范围
    singleton
    prototype
    @PostConstruct
    初始化执行方法
    @PreDestroy
    销毁执行方法
    新注解
    @Configuration
    spring的配置文件
    applicationContext.xml
    @Bean
    将第三方类,交给ioc容器
    @PropertySource
    加载第三方配置文件
    @ComponentScan
    开启注解组件扫描
    @Import
    配置类模块化
    八 Spring整合Junit
    @Runwith注解替换原来的运行器
    @RunWith(SpringRunner.class)
    通过该运行期 加载核心配置文件
    使用@ContextConfiguration指定配置文件或配置类
    @ContextConfiguration(value = {“classpath:applicationContext.xml”})
    @ContextConfiguration(classes = {SpringConfig.class})
    任务二
    一 转账案例基础
    基础功能
    转出
    转入
    传统事务控制
    ConnectionUtils
    ThreadLocal
    线程局部变量,存储空间(Thread.ThreadLocalMap)
    TransactionManager
    事务管理器
    问题:
    核心业务 和 通用业务 产生了代码入侵
    二 转账案例进阶
    代理事务控制
    JDK: 面向接口的代理方式: 要求被代理类至少实现一个接口
    CGLIB: 面向父类的代理方式,要求被代理的类,不能被final修饰
    三 SpringAOP简介
    AOP:面向切面编程
    在不修改源代码情况下,实现对方法的增强
    spring的AOP
    简化了增强部分的配置,使开发者只关注业务本身
    AOP底层实现
    动态代理
    在 Spring 中,框架会根据目标类是否实现了接口来决定采用哪种动态代理的方式。
    AOP相关概念
    Target
    目标对象: 要被代理的对象
    Joinpoint
    连接点: 可以被增强的方法
    Pointcut
    切点: 真正被增强的方法
    Advice
    通知: 包含了增强业务逻辑的方法
    Weaving
    织入: 切点和通知结合,产生代理对象的过程
    Aspect
    切面: 通知和切入点的结合
    Proxy
    代理对象
    四 基于XML的AOP开发
    aop织入的配置
    aop:config

    <aop:before method=“通知方法名称” pointcut=“切点表达式”>


    切点表达式

    通知的类型
    aop:before
    前置通知
    aop:after-returning
    后置通知
    aop:after-throwing
    异常通知
    aop:after
    最终通知
    aop:around
    环绕通知
    五 基于注解的AOP开发
    切面类
    @Aspect
    public class MyAdvice {}
    切点表达式
    @Pointcut(“execution(void com.lagou.service.. .(..))”)
    public void myPoint(){}
    通知类型
    @Before
    @AfterReturning
    @AfterThrowing
    @After
    @Around
    AOP自动代理
    aop:aspectj-autoproxy/
    @EnableAspectJAutoProx
    六 AOP优化转账案例
    xml配置实现
    注解配置实现
    任务三
    一 Spring的JdbcTemplate
    介绍
    JdbcTemplate是Spring的一款用于简化Dao代码的工具,它底层封装了JDBC技术
    核心对象
    JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSource dataSource);
    核心方法
    DML
    int update();
    DQL
    List query();
    T queryForObject();
    查询ORM映射处理实现类
    BeanPropertyRowMapper<>(Class 字节码对象)
    Spring整合JdbcTemplate
    实现转账案例
    我们发现了无法使用自己定义的事务管理器(LOW)、需要引出spring内置事务管理器
    二 Spring的事务
    编程式事务控制(了解)
    开发者直接把事务的代码和业务代码耦合到一起,在实际开发中不用。
    相关对象
    PlatformTransactionManager:是spring的事务管理器,里面提供了我们常用的操作事务的方法。
    DataSourceTransactionManager
    TransactionDefinition: 事务的定义对象
    隔离级别
    ISOLATION_READ_UNCOMMITTED 读未提交
    ISOLATION_READ_COMMITTED 读已提交
    ISOLATION_REPEATABLE_READ 可重复读
    ISOLATION_SERIALIZABLE 串行化
    传播行为
    REQUIRED
    一个service调用另一个service方法时,必须要有事务
    增删改
    SUPPORTS
    支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
    查询
    声明式事务控制(掌握)
    在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。底层采用AOP思想来实现的。
    声明式事务控制明确事项:
    - 核心业务代码(目标对象)

    • 事务增强代码(Spring已提供事务管理器)
    • 切面配置
      基于XML方式的声明式事务控制
      * 平台事务管理器配置

    • 事务通知的配置

    • 事务aop织入的配置
      基于注解方式的声明式事务控制
      * 平台事务管理器配置(xml、注解方式)
    • 事务通知的配置(@Transactional注解配置)
    • 事务注解驱动的配置 tx:annotation-driven/、@EnableTransactionManagement
      三 Spring集成web环境
      ApplicationContext应用上下文获取方式
      Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象
      具体配置
      1. 在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)
    1. 使用WebApplicationContextUtils获得应用上下文对象ApplicationContext