Spring FrameWork

Spring

  • 初识Spring
  • Spring 家族
    • spring.io
    • Spring 已经形成了一种开发的生态圈,Spring 提供了若干个项目,每个项目用于完成特定的功能
  • Spring FrameWork : 底层框架
  • Spring Boot :提高快发速度
  • Spring Cloud :分布式开发

Spring Framework 系统架构

  • 是Spring 生态圈中最基础的项目,是其他项目的根基

    • Core Container :核心容器
    • AOP:面向切面编程
    • Aspects:AOP思想实现
  • 核心概念:

    • 问题引发:代码的耦合度偏高如何解决?

      使用对象时,在程序中不要主动使用 new 产生对象,转换为由外部提供对象

    • IoC(Inversion of Control) 控制反转

      对象的创建控制权由程序转移到外部,这种思想称为控制反转

  • Spring 技术对IoC 思想进行了实现

    • Spring 提供了一个容器,称为 IoC 容器,用来充当 IoC 思想中的 “外部”
    • IoC 容器负责对象的创建,初始化等一系列工作,被创建或管理的对现在IoC 容器中统称为 Bean
  • DI(Dependency Injection)依赖注入

    • 在容器中建立 bean 与 bean 之间的依赖关系的整个过程,被称为依赖注入

      依赖注入(Dependency Injection, DI)是一种设计模式,也是Spring框架的核心概念之一。其作用是去除Java类之间的依赖关系,实现松耦合,以便于开发测试。

  • 最终目标 =》 充分解耦

    • 1、使用IoC 容器管理 bean(IoC)
    • 2、在 IoC 容器内将有依赖关系的 bean 进行绑定关系 (DI)
  • 最终实现了 :适用对象时不仅可以直接从 IoC 容器中获取,并且获取到的 bean 已经绑定了所有的依赖关系

    知识补充

    1. 什么是依赖关系,一个类依赖另外一个类,没他不能活(会报错):依赖关系在Java 中 主要在变量,形参,静态方法的调用……

      比如你想要喝水但 没有水杯装水 , 没有 手拿水,没有 嘴巴喝  。 那你就喝不成,这就是喝水的依赖

IoC 与 DI 入门

  1. 导入spring的坐标 spring-context

    1.    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
          </dependency
      
  2. 管理配置对象 :bean

    1.   <bean id="catDao" class="com.wdc.dao.impl.CatDaoImpl"/>
      
      1. id属性标示给bean起名字
        class属性表示给bean定义类型

  3. 获取IoC容器

    1. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      
  4. 获取bean(根据bean配置id获取

    1. CatDao catDao = (CatDao) ctx.getBean("catDao");
      
    2. 以上就是 IoC 入门 ,而DI 是基于 IoC 来管理 bean 的,下面就是DI 入门

  5. 删除业务层中使用new的方式创建的dao对象

  6. 提供对应的set方法

    1. 作用:让 Spring 容器能够将相应的依赖对象注入到业务类中。

    2. public void setCatDao(CatDao catDao) {
              this.catDao = catDao;
          }
      
      /* 1.Spring 容器在初始化 Bean 的过程中,会检查 Bean 中是否存在对应的 set 方法。
         2.如果找到了与依赖对象类型匹配的 set 方法,Spring 就会通过反射机制调用这些方法。
         3.调用 set 方法时,Spring 将所需的依赖对象作为参数传递给这些方法,从而完成注入。
      */
      
  7. 配置service与dao的关系

    1. <bean id="catService" class="com.wdc.service.impl.CatServiceImpl">
              <!--7.配置service与dao的关系-->
              <!--property标签表示配置当前bean的属性
              name属性表示配置哪一个具体的属性
              ref属性表示参照哪一个bean-->
              <property name="catDao" ref="catDao"/>
          </bean>
      

bean 基础配置

  • bean 的别名

    • 多个别名 (因为可能每个人的起名不一样)

      •   <bean id="catDao" name = " dao catd" class="com.wdc.dao.impl.CatDaoImpl"/>
        
      • 使用这些别名也可以成功引用, 中间可以使用 逗号、 分号、 空格

  • bean 的作用范围

    • scope=“singletor” 获取同一个对象(单例) - 默认

      scope=“prototype” 获取的是不同的对象(非单例)

    • 单例 让容器压力小,获取快

    • 适合交给容器进行管理的bean

      • 表现层对象
      • 业务层对象
      • 数据层对象
      • 工具对象
    • 不适合交给容器管理的bean

      • 封装实体的域对象
  • bean 的实例化

    • bean 本质就是对象,创建bean 使用构造方法

        1. 使用构造方法(可写可不写)

          如果它调用的构造方法不存在,将抛出 BeanCreationException

        2. 使用静态工厂、实例工厂 ,(了解)

        3. 使用 FactoryBean (掌握)

          1. 实现接口 FactoryBean

            1. public class OrderDaoFactoryBean implements FactoryBean<OrderDao> {
              
                  //代替原始实例创建对象的方法
                  @Override
                  public OrderDao getObject() throws Exception {
                      return new OrderDaoImpl();
                  }
              
                  @Override
                  public Class<?> getObjectType() {
                      return OrderDao.class;
                  }
              }
              
          2. 配置

            1.     <bean id="orderDao" class="com.wdc.factory.OrderDaoFactoryBean"/>
              
              
            2. **注意:**这里配置出来的对象不是 OrderDaoFactoryBean 的对象,而是里面的方法 getObject() 中返回的对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值