spring小结

1. 什么是spring

  • 是一个框架,核心技术是ioc,aop,实现解耦合。
  • spring是一个容器,容器中存放的是java对象,需要做的是把对象放入到容器中。

2. 怎么使用spring

  • spring是一个容器,把项目中用的对象放入到容器中
  • 让容器完成对象的创建,对象之间关系的管理(属性赋值)
  • 我们在程序中,从容器中获取要使用的对象

3. 怎么样的对象放入容器中

  • dao类,service类,controller类,工具类
    1. 使用xml配置文件,使用<bean>
    2. 注解
  • spring中的对象默认都是单例的,在容器中叫这个名称的对象只有一个

4. 不放入到spring容器中的对象

  1. 实体类对象,实体类数据来自数据库
  2. servletlistenerfilter

5. 使用spring框架的步骤

  1. 加入依赖

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.5.RELEASE</version>
    </dependency>
  2. 创建类:接口,实现类,没有接口的类

  3. 创建spring的配置文件,使用<bean>声明对象

  4. 我们使用容器中的对象,通过ApplicationContext接口和它的实现类ClassPathXmlApplicationContext的方法getBean()

6. 核心技术

  • ioc:控制反转

    1. 理论,思想,概念:指导开发人员在容器中,代码之外管理对象,给属性赋值,管理依赖
    2. ioc技术实现使用的di(依赖注入):开发人员在项目中只需要提供对象的名称,对象的创建、查找、赋值都由容器内部自己实现
    3. spring使用的di的技术,底层使用的是反射机制

    4. di给属性赋值:

      1. set注入:spring调用类的set方法实现属性赋值
        1. 简单类型的set注入,<property name="属性名" value="属性的值"/>
        2. 引用类型的set注入,property name="属性名" ref="bean的id"/>
      2. 构造注入:spring调用有参数构造方法
        1. <constructor-arg>的name属性,name表示构造方法的形参名
        2. <constructor-arg>的index属性,index表示构造方法形参的位置,从0开始
  • aop:面向切面编程

    • 底层是动态代理
      1. jdk动态代理
        • 使用jdk反射包中的类实现创建代理对象的功能
        • 要求:目标类必须实现接口
      2. cglib动态代理
        • 使用第三方的工具库,实现代理对象的创建
        • 要求:目标类必须能够继承,不能是final
        • 原理:就是继承,子类就是代理
    • aop:看作是动态代理的规范化,把实现动态代理的步骤进行了一个规范,定义
    • aop作用:
      1. 在目标类不修改源代码的情况下,增加功能
      2. 减少重复的代码
      3. 专注业务功能的实现
      4. 解耦合:业务功能和日志,事务这些非业务功能的耦合
    • 什么时候考虑使用aop技术
      1. 当你要给一个系统中存在的类修改功能,但是原有类的功能不完善,但是你还有源代码,使用aop增加功能
      2. 要给项目中的多个类,增加一个相同的功能,使用aop
      3. 给业务方法增加事务,日志输出
    • aop的实现框架
      1. spring实现了aop,实现方式是接口
      2. aspectj框架
        1. 使用注解可以实现aop的功能
        2. 使用xml配置文件中的标签实现aop功能
    • aop中的概念
      1. aspect:切面,表示给业务方法增加的功能,一般日志输出,事务,权限检查等是切面
      2. pointcut:切入点,是一个或多个JoinPoint的集合,表示切面功能执行的位置
      3. advice:通知,也叫增强,表示切面执行的时间,在方法前,方法后等等
    • aspectj框架的使用
      1. 表示切面的执行时间,使用的通知注解
        1. @Before:前置通知,在目标方法之前先执行切面的功能
        2. @AfterReturning:后置通知,在目标方法之后执行的,能够获取到目标方法的返回值
        3. @Around:环绕通知,在目标方法前和后都能增强功能,控制目标方法的访问,修改返回值
        4. @AfterThrowing:异常通知,在目标方法抛出异常后执行的通知
        5. @After:最终通知,总是会被执行的代码
        6. @Pointcut:定义和管理切入点的辅助注解
        7. 代理的使用方式
          1. 如果目标类有接口,框架使用jdk动态代理
          2. 如果目标类没有接口,默认使用的cglib动态代理
          3. 有接口也可以强制使用cglib动态代理
      2. 表示切面位置的切入点表达式:execution(访问修饰符 返回值 包名.类名.方法名称(方法的参数) 异常)
  • spring整合mybatis

    • 整合的想法:使用spring的ioc核心技术,把mybatis框架中使用的对象交给spring统一创建和管理。spring是容器,存放你项目中要是用的各种对象,例如Service对象,Dao对象,工具类对象等等。

    • 交给spring的mybatis对象

      1. 数据源DataSource,使用阿里公司的Druid连接池

      2. SqlSessionFactory对象,使用的SqlSessionFactoryBean在内部创建的SqlSessionFactory

      3. Dao代理对象,使用的MapperScannerConfigurer,在这个类的内部,调用getMapper(),创建接口的Dao对象


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!