Spring-IOC学习笔记-01初识

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-IOC学习笔记-01初识相关的知识,希望对你有一定的参考价值。

初识Spring-IOC

1 简介

1.1 什么叫Spring

  • 狭义的Spring:Spring Framework
  • 广义的Spring:指的是整个Spring生态,包含**Spring Framework,Spring boot,Spring cloud,Spring Security**等在内的一站式开发框架。

1.2 Spring架构图

在这里插入图片描述


2 初识Spring IOC

  • IOC (Inversion of Control): 控制反转,是一种设计理念。将实例对象的权利转移到IOC容器管理,使用时不再需要new对象,直接在IOC容器里面拿。
  • DI (dependency injection): 依赖注入,是实现IOC理念的一种方式。
  • 核心作用就是:由Spring IOC容器创建和管理对象(Beans)

2.1 传统方式

当使用一个类的时候都需要先去实例这个类对象,每多一个,多实例一个,这样的方式代码耦合性相当高,当需求改变时,需要修改代码中对应的实例对象。

在这里插入图片描述

2.2 IOC思想

全部统一由一个容器去管理这些需要的类,当需要使用时,直接在容器中拿,这样减少了代码的耦合性。

在这里插入图片描述

2.3 DI实现

DI依赖注入,在容器中可以将类中需要的其他类注入。

在这里插入图片描述

3 SpringIOC初体验

3.1 maven导入

<!--spring-context-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.12.RELEASE</version>
</dependency>

3.2 准备entity类

每一个entity类都需要遵循javaBean规范,必须书写get和set方法。

3.2.1 woman

public class Woman {
    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private int age;

    /**
     * 外貌
     */
    private String outLook;
}

3.2.2 Man

public class Man {
    /**
     * 姓名
     */
    private String name;

    /**
     * 资产
     */
    private String fund;

    /**
     * 心动女生
     */
    private Woman woman;
    /**
     * 方法:示爱
     */
    public void proposal(){
        System.out.println("这名拥有"+fund+"资产的名字叫"+name+"的男嘉宾向年纪为"
                +woman.getAge()+"的外貌是"+woman.getOutLook()+"的"
                +woman.getName()+"女士示爱了");
    }
}

3.3 书写配置文件

在配置文件中可以添加多个bean

  • id:bean的定义name
  • class:需要ioc管理的entity类路径
  • property:配置参数
  • value:设置基本数据类型的参数
  • ref:引用类型的参数引用
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置Bean参数 -->
    <bean id="lili" class="com.moon.entity.Woman">
        <property name="name" value="莉莉"/>
        <property name="age" value="18"/>
        <property name="outLook" value="面容较好的"/>
    </bean>
    <bean id="jackMa" class="com.moon.entity.Man">
        <property name="name" value="杰克马"/>
        <property name="fund" value="数百亿"/>
        <property name="woman" ref="lili"/>
    </bean>
</beans>

3.4 书写测试类

@Test
public void springIoc() {
  	// 获得IOC容器上下文
    ClassPathXmlApplicationContext context = new 	ClassPathXmlApplicationContext("applicationContext.xml");
    // 取bean
  	// 方式一:通过id取bean,需要强转
    Woman lili = (Woman) context.getBean("lili");
    // 方式二:通过id取bean,传入返回类型,不需要强转
    Man jackMa = context.getBean("jackMa", Man.class);
  
    System.out.println(lili);
    jackMa.proposal();
}

以上是关于Spring-IOC学习笔记-01初识的主要内容,如果未能解决你的问题,请参考以下文章

Spring-IOC学习笔记-04扩展命名空间

Spring-IOC学习笔记-05bean的属性

Spring-IOC学习笔记-08基于JavaConfig开发

Spring-IOC学习笔记-07基于注解开发

Spring-IOC学习笔记-03DI依赖注入

Spring-IOC学习笔记-02基于XML创建Bean