@Lazy 注解和标签的lazy-init属性有什么区别?

2024-01-05

根据我的理解,@Lazy注释和标签的lazy-init属性应该具有相同的功能。但是当我开发以下代码时,它显示出不同的行为。 在下面的代码中,我期待:-(循环依赖错误)

org.springframework.beans.factory.BeanCurrentlyInCreationException

我已使用 @Lazy 注释附加了代码,根据我的期望,它不应允许循环依赖。

@Component
public class A {
   private B b;
   @Autowired
   public A(@Lazy B b) {
         System.out.println("A.A() - 1-param Constructor");
         this.b = b;
   }    
}

@Component
public class B {
   private A a;
   @Autowired
   public B(A a) {
         System.out.println("B.B() - 1-param Constructor");
         this.a = a;
   }        
} 

主要类别:

public class AnnotationApp{
    public static void main(String[] args){
         ApplicationContext ctx = new ClassPathXmlApplicationContext("com/ry/cfgs/annotationAppContext.xml"); 
         B objB = ctx.getBean("b", B.class); 
         A objA = ctx.getBean("a", A.class);
    }
}

弹簧配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.3.xsd">

     <context:component-scan base-package="com.ry.beans.annotation"></context:component-scan>

</beans>

输出 :-

A.A() - 1 参数构造函数

B.B() - 1 参数构造函数

需要解释一下,为什么会这样?


From Spring框架文档 https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factorybeans-annotations:

...您还可以将@Lazy标注注入点的注释 和@Autowired or @Inject。在这种情况下,它会导致注入 惰性解析代理的。

所以,在下面的代码中:

@Autowired
public A(@Lazy B b) {
    // ...
}

b将被注入(自动装配)首次访问而不是在启动时。

现在,如果您将代码更改为以下内容:

@Autowired
public A(@Lazy B b) {
    System.out.println("A.A() - 1-param Constructor");
    System.out.println(b.toString());
    this.b = b;
}

你会看到org.springframework.beans.factory.BeanCurrentlyInCreationException被抛出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Lazy 注解和标签的lazy-init属性有什么区别? 的相关文章

  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要

随机推荐

  • 有什么办法可以等到 DirectionsService 返回结果吗?

    我在使用 Google DirectionsService 时遇到问题 我知道它是异步的 这就是我遇到麻烦的原因 我想等到 DirectionsService 返回结果 而不是在没有答案的情况下执行代码 这是一个示例 function sn
  • 如何在集成测试中传递授权令牌标头?

    A 相关问题 https stackoverflow com questions 12041091 ror testing an action that uses http token authentication意味着我可以使用令牌身份验
  • Linux进程间通信如何选择“Key”?

    再会 我正在做作业 其中指出我有 5 个进程 一个服务器 其余的都是客户端 每个进程都应该由不同的可执行文件引发 我将实现一个双向消息传递解决方案 但问题不在于消息传递本身 有没有一种优雅的方式来传达key这些不同的可执行文件之间 即当我调
  • 递增指针 (ptr++) 和 (*ptr++)

    当我有这个疑问时 我正在重新审视指针 int ptr int arr 5 10 20 30 40 50 ptr arr 0 Now printf Value d ptr 会打印10 if I do ptr printf Value d pt
  • 我如何告诉 R 正确舍入?

    我如何告诉 R 正确舍入 R 中的小数位数 我遇到了一个不知道如何解决的问题 我希望 R 计算 5 26 100 19 230769 x lt 5 26 100 x 给我 1 19 23077 让我们尝试使用 round 首先将数字设置为
  • 通过 pyCurl 上传文件

    我正在尝试将以下curl代码转换为pycurl 我不想使用请求 我需要使用 pycurl 因为 requests 在我的旧 python 版本中不能完全工作 curl X POST H Accept Language en F email
  • 如何将 amazon S3 存储桶策略设置为除管理员之外的所有人私有?

    我有一个存储桶 我不小心将数千个带有 ACL 的文件上传到 public read 我希望除生成的访问 URL 之外的所有文件均不可用 我尝试创建一个存储桶策略 拒绝所有人的所有操作 并允许我的所有操作 它不起作用 即使生成了访问 URL
  • 将 DataTable 转换为 XML 文件,反之亦然

    我在将 XML 文件读取到DataTable 最初 我正在写一个Datatable到 XML 文件并保存 现在 当我想将 XML 文件读回到DataTable 它没有发生 以下代码用于写入文件 private void saveAsTool
  • Elastic Search:具有自定义类型的一个索引来区分文档模式 VS 多个索引,每个文档类型一个索引?

    我在 ES 方面没有经验 我的背景更多是关系数据库 我试图实现在我的 Web 应用程序中拥有一个搜索栏来搜索它的全部内容 或者我愿意索引的内容 的目标英语 实现的架构是 Jamstack 其中 gatsby 应用程序从 Strapi 应用程
  • 错误:“无法分配给‘Bool’类型的不可变表达式”?

    我该如何解决 我是一名新编码员 谢谢 我收到以下错误 无法分配给 Bool 类型的不可变表达式 当我尝试将 isSelected 设置为false and true IBAction func onFilter sender Any if
  • 使用 Sympy 方程进行绘图

    创建 Sympy 方程 求导 然后绘制该方程的结果的最佳方法是什么 我有符号方程 但无法弄清楚如何制作用于绘图的值数组 这是我的代码 from sympy import symbols import matplotlib pyplot as
  • 使用 protobuf-net 进行惰性、流驱动的对象序列化

    我们正在开发一个用于流式传输大量数据的 WCF 服务 因此我们选择使用WCF 流式传输 http msdn microsoft com en us library ms733742 aspx功能结合protobuf网络 http code
  • 如何区分用户是否处于订阅试用期或不在google play?

    我正在实现一项服务器端服务 用于检查用户的 google play 订阅状态 我使用 Android Publisher API https developers google com android publisher api ref p
  • Rails3 & Git & Heroku - 开发/登台服务器

    我有一个 Rails 3 应用程序 正在与一个使用 Git Github 的团队一起开发 并部署到 Heroku cedar 堆栈 我们的 Github 存储库有 2 个主要分支 Master 和 Development 我想定期将我们的开
  • REST 查询中的 UTF-8 编码字符未正确呈现

    我正在使用一个外部 REST 服务 该服务以 UTF 8 编码提供所有内容 由于某种原因 我的应用程序无法正确处理响应 如果我转储回复 我会看到像 Lule 应该是 Lule 这样的东西 编辑 如果我将字符串转发 不更改 到 UI 也会发生
  • 如何让 toString() 返回多行字符串?

    我正在开发一个程序 该程序搜索数组并找到最小值 然后打印出跑步者的时间 名字和姓氏 我需要弄清楚如何在不同的行上返回三个值 例如 public String toString return String format firstName l
  • Java 同步 String IllegalMonitorStateException

    我试图让 Thread2 等待 String 并让 Thread1 通知 String 更新 我确实同步了 String 对象 如下面的代码所示 但我仍然得到IllegalMonitorStateException这是我的代码 public
  • CreateFile 无法共享串行 (COM) 端口

    The 创建文件 https msdn microsoft com en us library windows desktop aa363858 v vs 85 aspx函数对于打开文件或设备进行读 写访问非常有用 提供句柄 第三个参数 d
  • 失去与 Net::SSH::Perl 的连接

    解决方案如下 我们有一个 ETL 系统 它将数据提取到 CSV 中 将其上传到另一台服务器 然后需要连接到另一台服务器并调用 java jar 将 csv 加载到 memcache 中 我有一个脚本可以执行其中的每一步 但在最后一步会丢失
  • @Lazy 注解和标签的lazy-init属性有什么区别?

    根据我的理解 Lazy注释和标签的lazy init属性应该具有相同的功能 但是当我开发以下代码时 它显示出不同的行为 在下面的代码中 我期待 循环依赖错误 org springframework beans factory BeanCur