当前位置: 首页 > article >正文

@Lookup与@Bean@Scope获取原型实例,谁更胜一筹

那必然是 @Lookup 呀 🛼

    • 他是谁 | 运行时查找 bean
      • 示例 | 谁更好呢
      • 作用 | 妙用多多

他是谁 | 运行时查找 bean

@Lookup是Spring框架的一部分,它允许在运行时动态查找bean。使用@Lookup注解的方法必须返回一个bean,它将在每次调用该方法时创建一个新的实例。这对于需要在运行时动态创建依赖关系的场景非常有用,例如在运行时根据用户输入创建不同的bean。

示例 | 谁更好呢

当将bean的作用域设置为原型(prototype)时,每次请求该bean时,Spring都会创建一个新的实例。这意味着,如果您在两个或多个对象中注入了同一个原型作用域的bean,并且对该bean进行了修改,则每个对象都将获取一个新的bean实例,并且它们之间的状态不会相互影响。

例如,假设您有一个名为MyPrototypeBean的原型作用域的bean,它具有一个实例变量value。如果您在两个或多个对象中注入MyPrototypeBean,并且在一个对象中修改了value值,则该值不会影响其他对象。每个对象都将获得一个新的MyPrototypeBean实例,并且它们之间的状态不会相互影响。

现在,如果您想在原型作用域中获取新的bean实例,而不是在构造函数中注入它们,您可以使用@Lookup注解来声明一个方法来获取新的bean实例。例如:


@Component
public class MyComponent {

   @Lookup
   public MyPrototypeBean getMyPrototypeBean() {
      return null;
   }

   public void doSomething() {
      MyPrototypeBean bean1 = getMyPrototypeBean();
      MyPrototypeBean bean2 = getMyPrototypeBean();
      // 修改bean1和bean2的value值不会相互影响
      bean1.setValue("value1");
      bean2.setValue("value2");
   }
}

在这个示例中,我们使用@Lookup注解声明了一个名为getMyPrototypeBean()的方法,它将在每次调用时返回一个新的MyPrototypeBean实例。在doSomething()方法中,我们通过调用getMyPrototypeBean()方法来获取两个新的MyPrototypeBean实例,并且它们之间的状态不会相互影响。

不用 @LookUp, 当然你也可以改成这样

@Component
public class MyComponent {

   @Bean
   @Scope("prototype")
   public MyPrototypeBean getMyPrototypeBean() {
      return new MyPrototypeBean();
   }

   public void doSomething() {
      MyPrototypeBean bean1 = getMyPrototypeBean();
      MyPrototypeBean bean2 = getMyPrototypeBean();
      // 修改bean1和bean2的value值不会相互影响
      bean1.setValue("value1");
      bean2.setValue("value2");
   }
}

使用@Bean注解来声明原型bean需要开发人员手动创建和管理该bean实例,这种方式可能不如使用@Lookup注解那么优雅

作用 | 妙用多多

@Lookup注解可以在运行时动态查找bean,并且可以返回一个新的实例。这使得它在某些场景下非常有用,例如:

  1. 需要在每次调用时创建新的依赖关系:如果您需要在每次调用时创建新的依赖关系,例如根据不同的参数创建不同的bean实例,那么@Lookup注解可以帮助您实现这一点。

  2. 需要在原型作用域中创建新的bean实例:如果您需要在原型作用域下创建新的bean实例,以避免多个对象共享同一个实例,那么@Lookup注解也非常有用。

  3. 需要解决循环依赖问题:如果您的应用程序中存在循环依赖问题,例如A依赖于B,B又依赖于A,那么@Lookup注解可以帮助您解决这个问题。通过在需要的地方使用@Lookup注解来获取依赖关系,而不是在构造函数中注入依赖关系,可以避免循环依赖问题。

总之,@Lookup注解是Spring框架中一种灵活的方式,可以在运行时动态查找bean并返回新的实例。它可以帮助您解决一些常见的依赖注入问题,并使您的代码更加灵活和可重用。


http://www.kler.cn/a/5809.html

相关文章:

  • 【docker】exec /entrypoint.sh: no such file or directory
  • dbeaver创建create临时表之后查询不到问题排查
  • 数据结构与算法之数组: LeetCode 136. 只出现一次的数字 (Ts版)
  • 【Maui】动态菜单实现(绑定数据视图)
  • rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
  • Three.js教程015:全面讲解Three.js的UV与应用
  • gcc在Linux下如何运行一个C/C++程序
  • [致敬未来的攻城狮计划 1] 使用 “FSP Configuration”(FSP 配置)透视配置器设置运行环境
  • 2023年详解MySQL 开发规范
  • 指令操作码
  • python-实验报告-3
  • Nacos(Config)配置中心源码分析-02
  • 表和索引的并行度问题
  • 杂记——idea VM设置(idea启动缓慢,JVM部分参数解释,重启Idea)
  • 遗传算法(Genetic Algorithm,GA)
  • 交友项目【基础环境搭建】
  • 压缩器简介与实现
  • 炼钢厂VR职业技能实训软件,提高员工学习效率和掌握技能速度
  • 重置Win10电脑
  • Java中函数形参中`...`的作用
  • IT知识百科:什么是802.11ac(WiFi 5)?
  • 视频添加字幕
  • 两句话,ChatGPT帮我写一个打飞机的游戏
  • 选择正确优化器,加速深度学习模型训练
  • 谈谈面向对象编程和面向过程编程
  • 容器、虚拟机和 Docker