spring上下文简单用法

请直接看原文:

原文链接:一次性教你彻底理解 Spring容器和应用上下文! - 知乎 (zhihu.com)


Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是我们上面提到的的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等,这也是应用上下文实例对象最常见的应用场景。

有了上下文对象,我们就能向容器注册需要Spring管理的对象了。对于上下文抽象接口,Spring也为我们提供了多种类型的容器实现,供我们在不同的应用场景选择:

  • AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
  • ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
  • FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
  • AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
  • XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

有了以上理解,问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢,java注解也好,总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好,然后利用应用上下文对象加载进我们的Spring容器,容器就能为你的程序提供你想要的对象管理服务了。下面,还是贴一下简单的应用上下文的应用实例:

我们先采用xml配置的方式配置bean和建立bean之间的协作关系:

java 复制代码
<?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-3.2.xsd">
    <bean id="man" class="spring.chapter1.domain.Man">
        <constructor-arg ref="qqCar" />
    </bean>
    <bean  id="qqCar" class="spring.chapter1.domain.QQCar"/>
</beans>

然后通过应用上下文将配置加载到IOC容器,让Spring替我们管理对象,待我们需要使用对象的时候,再从容器中获取bean就ok了:

java 复制代码
public class Test {
    public static void main(String[] args) {
        //加载项目中的spring配置文件到容器
//        ApplicationContext context = new ClassPathXmlApplicationContext("resouces/applicationContext.xml");
        //加载系统盘中的配置文件到容器
        ApplicationContext context = new FileSystemXmlApplicationContext("E:/Spring/applicationContext.xml");
        //从容器中获取对象实例
        Man man = context.getBean(Man.class);
        man.driveCar();
    }
}

以上测试中,我将配置文件applicationContext.xml分别放在项目中和任意的系统盘符下,我只需要使用相应的上下文对象去加载配置文件,最后的结果是完全一样的。当然,现在项目中越来越多的使用java注解,所以注解的方式必不可少:

java 复制代码
//同xml一样描述bean以及bean之间的依赖关系
@Configuration
public class ManConfig {
    @Bean
    public Man man() {
        return new Man(car());
    }
    @Bean
    public Car car() {
        return new QQCar();
    }
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        //从java注解的配置中加载配置到容器
        ApplicationContext context = new AnnotationConfigApplicationContext(ManConfig.class);
        //从容器中获取对象实例
        Man man = context.getBean(Man.class);
        man.driveCar();
    }
}

自此,Spring容器和应用上下文就算阐述的差不多了,具体的技能点在今后的博文中会慢慢的给大家奉上。

相关推荐
少可爱8 分钟前
对接钉钉消息样例:DING消息、机器人
java·开发语言·钉钉
Magnum Lehar15 分钟前
vulkan游戏引擎的renderer下的vulkan缓冲区实现
java·前端·游戏引擎
鲁鲁51726 分钟前
VS Code + Maven 创建项目
java·maven
zxc_user37 分钟前
java后端-海外登录(谷歌/FaceBook/苹果)
java·开发语言·谷歌·facebook·海外登录
sslings44 分钟前
SpringMVC实战:动态时钟
java·学习
在未来等你1 小时前
互联网大厂Java求职面试:AI大模型推理优化与实时数据处理架构
java·ai·大模型·向量数据库·rag·分布式系统
买了一束花1 小时前
预分配矩阵内存提升文件数据读取速度
java·人工智能·算法·matlab
zizisuo1 小时前
Java集合框架深度剖析:结构、并发与设计模式全解析
java·javascript·数据结构·设计模式
要加油哦~1 小时前
刷题 | 牛客 - js中等题-下(更ing)30/54知识点&解答
java·开发语言·javascript
程序员鱼皮2 小时前
炸裂!Spring AI 1.0 正式发布,让 Java 再次伟大!
java·计算机·ai·程序员·互联网·开发