简单的Spring IoC实例 及 至少需要用到的jar包详解

版权声明:本文为博主原创,未经同意不得转载 https://blog.csdn.net/weixin_42950079/article/details/88678061

CD4356

File New Project
CD4356

选择Spring ,然后再 Libraries 下选择set up library later

  • Use library : 如果你已下载好了jar包,可选择该项,然后点击Create . .选择导入所需的jar
  • Download :如果你没有下载好所需jar,可选择该选项下载Spring所需的部分jar,并且它还会自动给你创建一个applicationContext.xml配置文件
  • set up library later :如果你想在创建好项目后在自己手动导入jar,那么可以选择该选项

CD4356

编辑项目名称,并选择项目所在路径
CD4356

创建好的项目结构如下
CD4356


在 src 下创建com.CD4356.ioc包,在包中创建Student
CD4356

Student类

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "我叫:"+this.name+",今年:"+this.age+"岁了...";
    }
}


src → New → XML Configuration File → Spring config 创建Spring的配置文件

不对啊,为什么没有Spring config选项,是不是出什么问题了

原来Spring config是依赖于spring-beans-4.3.22.RELEASE.jar产生的,而我们还没有导入该jar包,所以找不到Spring config选项
CD4356

SpringIoCDemo项目下,新建lib文件夹,然后到maven中央仓库中下载spring-beans-4.3.22.RELEASE.jar导入lib文件夹中,选择Add as Library 将jar包放在classpath路径下
在这里插入图片描述

继续 src → New → XML Configuration File → Spring config 创建Spring的xml配置文件,文件名为applicationContext(文件名可任意)
发现导入spring-beans-4.3.22.RELEASE.jar后,可以找到Spring config选项了
CD4356

创建好的applicationContext.xml文件如下所示,这些内容是自动生成的,我们还没有开始编辑该文件
CD4356

编辑applicationContext.xml配置文件,内容如下
CD4356

在src下创建一个测试类,名为SpringApplication

然后在编写加载XML配置文件代码时报错了,那么这是个什么错误呢?

因为ApplicationContext类位于spring-context-4.3.22.RELEASE.jar包中,而我们的项目中还没有带入该jar包,所以这里需要我们导入该jar包
CD4356

解决ApplicationContext报红后,ClassPathXmlApplicationContext又报红了

spring-beans-4.3.22.RELEASE.jar外部依赖spring-core-4.3.22.RELEASE.jar,没有导入spring-core-4.3.22.RELEASE.jar包,无法找到xml配置文件

所以导入spring-core-4.3.22.RELEASE.jar后可解决文题
CD4356

ok,完成下面代码后,点击main函数左边的绿色三角标运行项目
CD4356

哈哈!又报错了

缺少commons-logging-1.2.jar包,以后如果遇到java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory,一般都是缺少jar包导致的( 当然也可能是找不到自定义类 )

复制org.apache.commons.logging mvn到百度中(mvn即maven仓库),进入maven仓库中找,下载导入项目中
CD4356

又报错了

缺少spring-expression-4.3.22.RELEASE.jar

百度org.springframework.expression mvn,下载spring-expression-4.3.22.RELEASE.jar
CD4356

终于运行成功了
CD4356

由上面的内容可以看出,实现一个简单的Spring IoC示例至少需要用到5个jar(4个核心jar + 1个第三方日志jar)包

  • spring-context-4.3.18.RELEASE.jar
  • spring-beans-4.3.18.RELEASE.jar
  • spring-core-4.3.18.RELEASE.jar
  • spring-expression-4.3.18.RELEASE.jar
  • commons-logging-1.2.jar


Spring配置文件

Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的图纸

容器默认在src类路径下加载Spring配置文件,如果配置文件放在src的下一级目录下,则需要在ClassPathXmlApplicationContext(String configLocation)中指定src下的存放路径

/**
 * 在src目录下,新建一个spring包来存放applicationContext.xml
 */
ApplicationContext context=new 
ClassPathXmlApplicationContext("spring/applicationContext.xml");

在一些大型项目中,会有多个配置文件,我们可以在ClassPathXmlApplicationContext()方法中同时加载多个Spring配置文件

ApplicationContext context=new 
ClassPathXmlApplicationContext(new String[]{"spring/applicationContext.xml",
"spring/spring-config.xml",...,"spring/spring-config5.xml"});

其中ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。


Spring配置文件中的<bean>标签

一个用来描述一个对象,id是唯一标识(根据id识别具体的Bean),class表示该类的具体java文件(全类名)

因为spring IoC是一个容器,我们在Spring配置文件中添加对类的描述

在我们加载IOC容器后,Spring就会全自动的为我们创建相应的对象

此时我们就无需再自己new创建对象了,而是直接通过getBean("bean标签中id的属性值")获取即可

这就是所谓的控制反转,将创建对象的权限反转给Spring IoC容器,对类之间的关系进行了解耦,而这一切都离不开Spring配置文件中使用的标签

所以Spring IoC容器会帮我们做两件事:1. 创建对象  2. 为属性赋值
CD4356


Bean工厂的ApplicationContext

Spring IoC设计的核心是Bean容器

BeanFactory采用了java经典的工厂模式,通过从xml配置文件中读取javaBean的定义,来实现javaBean的创建、配置和管理bean与bean之间的依赖关系,所以BeanFactory可以称为IoC容器

ApplicationContext的中文含义是: 应用上下文,继承自BeanFactory接口,它除了包含BeanFactory的所有功能之外,还在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,使之成为Java EE应用放中首选的IoC容器,可应用于Java APP和Java Web中。

CD4356

BeanFactory 和 ApplicationContext 的不同之处

  • BeanFactory容器实例化后并不会自动实例化bean,只有当bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配
  • ApplicationContext容器实例化后会自动对所有的单实例bean进行实例化与依赖关系的装配,使之处于待用状态

猜你喜欢

转载自blog.csdn.net/weixin_42950079/article/details/88678061