Spring

本文深入介绍了Spring框架,包括其提高开发效率、解耦合的核心作用,以及Spring的核心组件如IoC容器。详细阐述了IoC(控制反转)的概念,解释了耦合与内聚的原理,并通过实例展示了如何在Spring中配置bean,控制其作用域和生命周期。此外,还探讨了依赖注入(DI)的概念,强调了IoC与DI的关系,并演示了set注入的使用方法。
摘要由CSDN通过智能技术生成

Spring简介

框架的作用
  • 提高开发效率
  • 增强可重塑性
  • 提供编写规范
  • 节约维护成本
  • 解耦底层实现原理
Spring是什么

​ Spring是分层的JavaEE/SE应用 full stack(一站式)轻量级开源框架

Spring体系结构
  • 底层是核心容器(Core Container)
    • Beans
    • Core
    • Context
    • SpringEI表达式
  • 中间层技术
    • AOP
    • Aspects
    • *Instrumentation
    • *Messaging
  • 应用层技术
    • 数据访问及数据集成
    • Web集成
    • Web实现
  • 基于Test测试

IoC简介

耦合与内聚
  • 耦合(Coupling):代码书写过程中所使用的技术的结合紧密度,用于衡量软件中各个模块之间的互联程度。
  • 内聚(Cohesion):代码书写过程中单个模块内部各组成部分之间的联系,用于衡量软件中各个功能模块内部的功能联系。

程序书写的目标:高内聚,低耦合

IoC
  • IoC(Inversion of Control):控制反转,Spring反向控制应用程序所需要使用的外部资源

  • Spring控制的资源全部放置在Spring容器中,该容器称为IoC容器

HelloSpring

  1. 导入Spring核心依赖包

    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.3.8</version>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>5.3.8</version>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.3.8</version>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>5.2.12.RELEASE</version>
    </dependency>
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
          <version>5.3.8</version>
    </dependency>
    <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.2</version>
    </dependency>
    
  2. 创建一个实现类,里面写一个方法输出“Hello Spring!”;在这里插入图片描述

  3. 在resources文件包下创建spring的配置文件 applicationContext.xml

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EE6JRUQ5-1631195411627)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210909210848989.png)]

  4. 在 配置文件 applicationContext.xml 中添加下面的代码

    <!-- 创建spring控制的资源-->
    <bean class="org.example.TestHello" id="hello"></bean>
    
  5. 在主方法中加载配置文件,获取资源

    public class App 
    {
        public static void main( String[] args )
        {
    
    //        java 创建对象的方式
    //        TestHello testHello = new TestHello();
    //        testHello.hello();
    
    //        创建对象的权利发生了变化
    //         spring来帮我们创建文件
    
    //        spring 框架创建对象的方式
    //	    加载配置文件   
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    //        获取资源
            TestHello testHello1 = (TestHello) applicationContext.getBean("hello");
    //        调用方法
            testHello1.hello();
        }
    }
    
  6. 运行

IoC配置(XML)

bean
  • 名称: bean

  • 类型: 标签

  • 归属: beans标签

  • 作用: 定义spring中的资源,受此标签定义的资源将受到spring控制格式:

    <beans>
    	<bean />
    </beans>
    
  • 基本属性:

    <bean id="beanId" name="beanName1 ,beanName2" class="ClassName "></bean>
    
    • id: bean的名称,通过id值获取bean
    • class: bean的类型
    • name: bean的名称,可以通过name值获取bean,用于多人配合时给bean起别名
bean属性scope
  • 名称: scope

  • 类型: 属性

  • 归属: bean标签

  • 作用: 定义bean的作用范围,控制bean创建后的对象是否是单例

  • 格式:

    <bean scope="singleton"></bean>
    
  • 取值:

    • singleton:设定创建出的对象保存在spring容器中,是一个单例的对象
    • prototype:设定创建出的对象保存在spring容器中,是一个非单例的对象
    • request、session、application、websocket:设定创建出的对象放置在web容器对应的位置

  • 单例与非单例区别:

    1. 对象创建时机

      • 单例对象:加载spring容器时创建

      • 非单例对象:获取对象时创建

    • 非单例:打印出来的三个对象的内存地址不同,且testService1和testService2不是同一个对象
      在这里插入图片描述
    • 单例:打印出来的三个对象的内存地址相同,testService1和testService2是同一个对象
      在这里插入图片描述

bean生命周期
  • 名称: init-method,destroy-method

  • 类型: 属性

  • 归属: bean标签

  • 作用: 定义bean对象在初始化或销毁时完成的工作

  • 格式:

    <!-- init-method 和 destroy-method 用于控制bean的生命周期 -->
    <bean init-method="init" destroy-method="destroy"></bean>
    
  • 取值: bean对应的类中对应的具体方法名

  • 注意事项:

    • 当scope= "singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次;
    • 当scope= “prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次;
    • 当scope= “singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次;
    • 当scope= “prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行。

当spring配置的是非单例对象的时候,该对象不归spring容器进行管理

DI-依赖注入

  • DI (Dependency Injection) 依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为**注入**

在这里插入图片描述

  • IoC与DI的关系:

    • IoC和DI是同一件事站在不同角度看待问题

set注入(主流)
  • 名称: property类型:标签

  • 归属: bean标签

  • 作用: 使用set方法的形式为bean提供资源格式:

    <bean>
    <property />
    </bean>
    
  • 基本属性:

    <property name="propertyName" value="propertyValue" ref="beanId"/>
    
    • name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)
    • value:设定非引用类型属性对应的值,不能与ref同时使用
    • ref:设定引用类型属性对应bean的id,不能与value同时使用
  • 步骤

    1. 对需要进行注入的变量添加set方法
      在这里插入图片描述

    2. 将要注入的资源声明为bean

    3. 使用property属性对资源实现注入

      • name属性对应的是set方法对应的要注入的变量名
      • ref属性对应的是要注入bean的id



。。。。未完待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值