熟练而勤奋的助手 - beans - 在 Spring 工作室工作。他们每个人都被赋予了自己独特的任务:有的创造玩具,有的分类糖果,有的种植鲜艳的花朵。
为确保研讨会工作有序高效,针对垃圾箱 - 范围制定了明确的规则。这些规则决定了 Bean 可以存在多长时间以及可以同时创建多少个同类实例。正是有了这些神奇的框架,研讨会才得以顺利、可靠地进行。
原型:刺猬贝克
每当有人点馅饼时,刺猬面包师都会用独特的原料制作新的馅饼。
刺猬:“每个人都想要自己的口味!这就是为什么我为每个订单制作一个新鲜的馅饼。”
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
这就是作用域 prototype 在 Spring 中的工作方式:每次请求新对象时,都会创建该 bean 的唯一实例。当您需要为每次使用提供独立的逻辑时,这非常有用。
例如:
应用程序有一个为每个用户生成报告的 bean:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
每次调用 context.getBean(ReportGenerator.class) 都会创建一个新实例。这对于在多用户系统中处理独特的数据很方便。
请求:胡萝卜兔子
配药兔子向他的助手解释:
“对于每一位来到空地的客人,我都会收集胡萝卜。但一旦客人离开,篮子就会回到我身边。”
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }Spring中的
Request范围意味着为每个HTTP请求创建一个bean。一旦请求完成,bean 就会被销毁。
使用示例:
想象一下,在 Web 应用程序中,您有一个用于收集用户数据的组件:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
每个用户请求都被分配一个唯一的篮子,它仅作为处理 HTTP 请求的一部分而“存在”。请求完成后,bean 将被删除,释放内存。
实际开发中Prototype和Request的对比:
原型:用于每次调用都需要唯一实例的任务,例如测试、生成唯一数据、处理独立任务。
请求:在 Web 应用程序中很有用,可在用户请求之间提供数据隔离。例如,购物车、身份验证数据或临时令牌。
方法差异:
原型可以在任何上下文中使用,包括控制台应用程序。
请求严格绑定到 Web 上下文,因为它依赖于 HTTP 请求。
Singleton:建造者鲍勃
建造者鲍勃在森林里工作,为每个人建造一座水坝。他说:
“我孤独一人,我会建造任何东西,无论有多少动物来找我!”
这意味着我们将始终拥有所有客户端访问的相同对象实例。每次都是同一个鲍勃来。他不需要被克隆或消失。于是他日复一日地工作。
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
Singleton 是 Spring 中的默认作用域。 Bean 的一个实例是在应用程序的整个运行期间创建的。当对象必须是所有应用程序组件之间的共享资源时,使用此 bean。
使用示例:
假设您有一个日志组件:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
该 bean 创建一次,所有应用程序组件都使用它来记录日志。这样既高效又节省内存。
申请:
- 记录
- 通过连接池使用数据库
- 管理缓存
会议:亲爱的熊
小熊为每一位来到他家的客人煮蜂蜜。他说:
“当你来看我的时候,我会照顾你的蜜罐。但是一旦你离开,你的蜜罐就消失了。”
@Component @Scope("request") public class Rabbit { public void giveCarrot() { System.out.println("Вот твоя морковка!"); } }
Spring 中的会话作用域意味着只要用户的 HTTP 会话持续,bean 就存在。
技术说明:
此作用域在 Web 应用程序中用于将对象绑定到特定的用户会话。当会话结束时,bean 将被销毁。
使用示例:
想象一下,您有一个用于存储用户授权数据的组件:
@Component @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) public class UserCart { private List<item> items = new ArrayList(); public void addItem(Item item) { items.add(item); } public List<item> getItems() { return items; } } </item></item>
只要用户的会话持续,就会为每个用户创建此 Bean。
申请:
- 存储用户数据(例如授权、偏好)
- 会话令牌管理
应用:菲林·菲尔
猫头鹰菲尔每天晚上都会给所有森林居民讲童话故事。他说:
“我的童话故事是整个森林里唯一的,每个人都来听我讲,每个人都足够了!”
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
范围 application 表示该 bean 为整个应用程序创建一次,但与单例不同,它仅在 Web 应用程序的上下文中使用。
此作用域类似于单例,但由 Web 上下文控制。它用于必须在整个应用程序中可访问的组件。
使用示例:
例如,用于存储全局设置的bean:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
此 Bean 创建一次,可供所有人使用。
申请:
- 应用程序配置
- 全局设置
- 所有用户共享的数据缓存
所有 Spring 作用域的比较
Scope | Жизненный цикл | Пример использования |
---|---|---|
Singleton | Всё время работы приложения | Логирование, работа с базами данных |
Prototype | Новый объект при каждом вызове | Генерация отчётов, тестирование |
Request | Один HTTP-запрос | Корзина покупок, временные данные |
Session | Вся HTTP-сессия пользователя | Данные авторизации, настройки пользователя |
Application | Всё время работы приложения | Глобальные настройки, кэш на уровне приложения |
何时使用什么?
Singleton - 用于共享、不变的资源。
原型 - 用于孤立的任务、独特的数据。
请求 - 在一个请求中获取临时数据。
会话 - 用于需要在同一用户的请求之间存储的数据。
应用程序 - 用于所有用户使用的全局数据。
以上是魔法范围:Spring 如何组织 beans的详细内容。更多信息请关注PHP中文网其他相关文章!

Java在企业级应用中被广泛使用是因为其平台独立性。1)平台独立性通过Java虚拟机(JVM)实现,使代码可在任何支持Java的平台上运行。2)它简化了跨平台部署和开发流程,提供了更大的灵活性和扩展性。3)然而,需注意性能差异和第三方库兼容性,并采用最佳实践如使用纯Java代码和跨平台测试。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)橱柜橱柜:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

Java适合开发跨服务器web应用。1)Java的“一次编写,到处运行”哲学使其代码可在任何支持JVM的平台上运行。2)Java拥有丰富的生态系统,包括Spring和Hibernate等工具,简化开发过程。3)Java在性能和安全性方面表现出色,提供高效的内存管理和强大的安全保障。

JVM通过字节码解释、平台无关的API和动态类加载实现Java的WORA特性:1.字节码被解释为机器码,确保跨平台运行;2.标准API抽象操作系统差异;3.类在运行时动态加载,保证一致性。

Java的最新版本通过JVM优化、标准库改进和第三方库支持有效解决平台特定问题。1)JVM优化,如Java11的ZGC提升了垃圾回收性能。2)标准库改进,如Java9的模块系统减少平台相关问题。3)第三方库提供平台优化版本,如OpenCV。

JVM的字节码验证过程包括四个关键步骤:1)检查类文件格式是否符合规范,2)验证字节码指令的有效性和正确性,3)进行数据流分析确保类型安全,4)平衡验证的彻底性与性能。通过这些步骤,JVM确保只有安全、正确的字节码被执行,从而保护程序的完整性和安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

记事本++7.3.1
好用且免费的代码编辑器

禅工作室 13.0.1
功能强大的PHP集成开发环境

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。