Spring工厂API与原理

简介: Spring工厂API与原理

1. Spring 核心 API

ApplicationContext

作⽤:Spring 提供的 ApplicationContext 这个⼯⼚,⽤于对象的创建

好处:解耦合

ApplicationContext 接⼝类型

接⼝:屏蔽实现的差异

⾮web环境 : ClassPathXmlApplicationContext (main junit)

web环境 : XmlWebApplicationContext

image.png


ApplicationContext 是重量级资源。会占用大量内存。

So 不会频繁的创建对象 : ⼀个应⽤只会创建⼀个⼯⼚对象。

一定是线程安全的。

2. 程序开发

  1. 创建类型
  2. 配置⽂件的配置 applicationContext.xml
<bean id="person" class="com.snow.po.Person"/>


 3.通过⼯⼚类,获得对象

ApplicationContext ctx 
    = new ClassPathXmlApplicationContext("/applicationContext.xml"); 

Person person = (Person)ctx.getBean("person"); 

3. 细节分析

3.1 名词解释

Spring⼯⼚创建的对象,叫做 bean 或者组件(componet)

3.2 Spring⼯⼚的相关的⽅法

//  通过这种⽅式获得对象,就不需要强制类型转换
Person person = ctx.getBean("person", Person.class);
System.out.println("person = " + person);

//  当前Spring的配置⽂件中 只能有⼀个<bean class是Person类型
Person person = ctx.getBean(Person.class);
System.out.println("person = " + person);

//  获取的是 Spring⼯⼚配置⽂件中所有bean标签的id值 person person1
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
    System.out.println("beanDefinitionName = " +
                       beanDefinitionName);
}

//  根据类型获得Spring配置⽂件中对应的id值集合
String[] beanNamesForType = ctx.getBeanNamesForType(Person.class);
for (String id : beanNamesForType) {
    System.out.println("id = " + id);
}

//  ⽤于判断是否存在指定id值的bean
//  ⽤于判断是否存在指定id值得bean,不能判断name值
if (ctx.containsBeanDefinition("a")) {
    System.out.println("true = " + true);
}else{
    System.out.println("false = " + false);
}

//  ⽤于判断是否存在指定id值的bean
//  ⽤于判断是否存在指定id值得bean,也可以判断name值
if (ctx.containsBean("person")) {
    System.out.println("true = " + true);
}else{
    System.out.println("false = " + false);
}

3.3 配置⽂件中需要注意的细节

1. 只配置class属性
<bean class="com.snow.po.Person"/>
    a) 上述这种配置 有没有id值 有 -> 默认:com.snow.po.Person#0
    b) 应⽤场景: 如果这个bean只需要使⽤⼀次,那么就可以省略id值
    如果这个bean会使⽤多次,或者被其他bean引⽤则需要设置id值

2. name属性
作⽤:⽤于在Spring的配置⽂件中,为bean对象定义别名(⼩名)
相同:
1. ctx.getBean("id|name")-->object
2. <bean id="student" class=""
         等效
   <bean name="student,stu,xuesheng" class=""
区别:
  别名可以定义多个, 但是id属性只能有⼀个值
//⽤于判断是否存在指定id值得bean,不能判断name值
if (ctx.containsBeanDefinition("person")) {
    System.out.println("true = " + true);
}else{
    System.out.println("false = " + false);
}
//⽤于判断是否存在指定id值得bean,也可以判断name值
if (ctx.containsBean("p")) {
    System.out.println("true = " + true);
}else{
    System.out.println("false = " + false);
}

4. Spring⼯⼚的底层实现原理(简易版)

Spring⼯⼚是可以调⽤对象私有的构造⽅法创建对象(反射)

image.png

5. 思考

问题:在开发过程中,是不是所有的对象,都会交给 Spring ⼯⼚来创建呢?

回答:理论上 是的,但是有特例 :实体对象(entity)是不会交给 Spring 创建,它是由持久层框架进⾏创建。

相关文章
|
3月前
|
存储 人工智能 自然语言处理
RAG 调优指南:Spring AI Alibaba 模块化 RAG 原理与使用
通过遵循以上最佳实践,可以构建一个高效、可靠的 RAG 系统,为用户提供准确和专业的回答。这些实践涵盖了从文档处理到系统配置的各个方面,能够帮助开发者构建更好的 RAG 应用。
1491 115
|
2月前
|
前端开发 Java 数据库连接
Spring核心原理剖析与解说
每个部分都是将一种巨大并且复杂的技术理念传达为更易于使用的接口,而这就是Spring的价值所在,它能让你专注于开发你的应用,而不必从头开始设计每一部分。
128 32
|
3月前
|
存储 人工智能 Java
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
682 57
|
2月前
|
算法 搜索推荐 API
京东拍立淘图片搜索 API 接口使用指南:从原理到实践
京东拍立淘图片搜索API,基于先进图像识别技术,支持上传图片、URL或拍摄实物搜索相似商品。其特点包括:搜索便捷高效,用户可快速发起搜索;精准匹配结果,通过算法捕捉商品特征确保准确;数据覆盖广泛,依托京东海量商品资源满足个性化需求;智能推荐拓展,根据用户行为挖掘潜在需求,提升购物体验。
|
2月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
106 9
|
3月前
|
安全 前端开发 Java
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
207 0
|
7月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
776 14
|
7月前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
223 9
|
8月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
460 4
|
8月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。