• Spring的创建和使用


    Spring的创建和使用

    Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么它就具备两个最基本的功能:将对象存储到容器(Spring)中;从容器中将对象取出来。
    在 Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称。严格的来说Bean就是能被多次使用的对象

    1.创建 Spring 项⽬

    接下来使⽤ Maven 方式来创建⼀个 Spring 项目,创建 Spring 项⽬和 Servlet 类似,总共分为以下3步:

    1. 创建⼀个普通 Maven 项⽬。
    2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
    3. 添加启动类。

    1.1 创建⼀个 Maven 项⽬

    这一步什么都不用配置,直接点击下一步
    在这里插入图片描述
    在这里插入图片描述

    1.2 添加 Spring

    在项⽬的 pom.xml 中
    添加下列代码

    <dependencies>
    <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-contextartifactId>
    <version>5.2.3.RELEASEversion>
    dependency>
     <dependency>
     <groupId>org.springframeworkgroupId>
     <artifactId>spring-beansartifactId>
     <version>5.2.3.RELEASEversion>
     dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    出现下面这样才是执行添加成功,如果没有就点击reload
    在这里插入图片描述

    1.3 添加启动类

    最后在创建好的项⽬ java ⽂件夹下创建⼀个启动类,包含 main ⽅法即可:
    在这里插入图片描述

    2.存储 Bean 对象

    存储 Bean 分为以下 2 步:

    1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。
    2. 将创建的 Bean 注册到 Spring 容器中。
      具体实现如下。

    2.1 创建 Bean

    所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:
    首先需要创建一个包,再把你自己创建的bean对象放到这个包里
    在这里插入图片描述
    在这里插入图片描述

    2.2将bean注册到容器

    在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示
    在这里插入图片描述
    Spring 配置文件的固定格式为以下内容(以下内容无需记忆,只需要保存到自己可以找到的地方就可以了,因为它是固定不变的):

    
    <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 htt
    p://www.springframework.org/schema/beans/spring-beans.xsd">
     
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    接下来,再将 User 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:
    class是你要存储到ioc中的bean的完整路径(包名+类名),你创建的包是啥,你就在class后面写上包名.bean名
    这个id是你给当前存入到spring中的bean起的名字

    <bean id="user" class="springdemo.User">bean>
    
    • 1

    总的就是

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:content="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <bean id="user" class="springdemo.User">bean>
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    以上步骤完成之后,只是一个声明,并没有真的把bean对象放到ioc容器中,而是在你调用相关方法的时候才会真正的去存,声明就是告诉容器下次有人调用我的时候我在过来
    但是从语义(浅层)来理解就是存储到spring中了,从深层理解就相当于懒汉模式,调用的时候再存储使用

    3.获取并使用Bean 对象

    获取并使⽤ Bean 对象,分为以下 3 步:

    1. 得到 Spring 上下文对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那
      么就得先得到 Spring 的上下文。
    2. 通过 Spring 上下文,获取某⼀个指定的 Bean 对象。
    3. 使用 Bean 对象。
    4. 如果取多个 Bean 的话重复以上第 2、3 步骤。

    3.1创建 Spring 上下文

    Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

    // 1.得到 Spring 的容器(上下⽂)对象,创建的时候需要配置 Spring 配置信息
    ApplicationContext context = new ClassPathXmlApplicationContext("spring-con
    fig.xml");
    
    • 1
    • 2
    • 3

    3.2获取bean对象

     //2.得到bean
            context.getBean("user");//user就是你之前设置的id
    
    • 1
    • 2

    在这里插入图片描述

    3.3使用bean对象(非必须)

    user.sayHi("小白");
    
    • 1

    总的代码

    public class App
    {
        public static void main(String[] args) {
            // 1.得到 Spring 的容器(上下⽂)对象,创建的时候需要配置 Spring 配置信息
            ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
            //2.得到bean[依赖查找-->IoC的一种实现]
            //也就相当于现在调用这个bean了,然后把这个bean放到容器里面,再给这个user对象,因此我们就不需要自己new一个新的对象了,直接从容器里面取就行了
            User user=(User)context.getBean("user");//user就是你之前设置的id
            //3.使用bean(非必须)
            user.sayHi("小白");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    如果你后续要改在这里插入图片描述
    这个文件的名字,也可以实现,你只要保证这个文件存在即可

    3.4得到上下文对象的另一种方式(BeanFactory)

       //1.获取上下文对象
            BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
            //2.获取bean
            User user=(User) context.getBean("user");
            //3.使用bean
            user.sayHi("小白");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ApplicationContext VS BeanFactory有什么区别?
    相同点:都是容器管理对象,都可以获取Bean对象。
    区别:
    1.ApplicationContext属于BeanFactory的子类,ApplicationContext拥有更多功能(国际化支持、资源访问支持、以及事件传播等方面的支持…)。
    2.加载Bean机制不同:BeanFactory是早期的加载bean对象的方式,由于早期内存缺乏,因此BeanFactory懒加载,按需加载(使用一个Bean加载一个Bean)
    ApplicationContext使用靠后,使用ApplicationContext的时候内存已经非常富裕了,因此ApplicationContext一次性加载所有Bean对象。
    因此ApplicationContext启动比较慢(内存占用大),因为启动的时候是加载所有bean对象的,但是它的性能很快,也就是说启动之后获取对象非常快,因为不用现成加载新的对象了,而BeanFactory正好相反启动快(内存占用小),但是后期的获取慢
    在这里插入图片描述
    在这里插入图片描述

    3.5 getBean 方法的更多用法

    1.跟据名称获取Bean对象(也就是上面代码展示的)
    在这里插入图片描述
    2.跟据类型获取Bean对象

     User user=context.getBean(User.class);//不需要强制类型转换
    
    • 1

    这个方法有可能有问题,如果你只有一个User类型注入到ioc里面,那么没问题,如果有多个,就会有问题了,报错如下
    在这里插入图片描述

    比如我是个老师,我叫穿白衣服的同学回答问题,那么我具体叫的是哪个穿白衣服的呢?可能有很多个穿白衣服的同学
    这个问题目前是无解的

    3.根据名称+类型来获取的
    这种方法比较保险,最推荐的

    User user=context.getBean("user",User.class);
    //也不需要进行强制类型转换
    
    
    • 1
    • 2
    • 3
  • 相关阅读:
    python数据库——redis
    java中集合框架的基础-1
    【Java】逻辑控制
    PaLM-E: An Embodied Multimodal Language Model
    使用 NuGet.Server 创建和部署 ASP.NET Web 应用程序搭建私有Nuget服务器
    OLTP和OLAP有什么区别和不同?
    Less常用内置函数
    2022年合肥市蜀山区信息学区赛(小学组)
    大话CAS
    基于SpringBoot+Vue的婚恋相亲交友系统
  • 原文地址:https://blog.csdn.net/weixin_73000974/article/details/133413130