spring singleton bean 字段未填充

2024-03-02

我需要一个带有一些内部字段的服务(单例),比如待处理线程的列表(是的,所有内容都被编写为线程安全的),问题是,如果我@autowire这个 bean 的字段似乎是空的。调试我发现代理正确绑定到实例(字段CGLIB$CALLBACK_X正确链接到填充的 bean)并填充了字段,但它提供的字段是空的。

以下代码行给出了我正在谈论的内容的总体概念。

@Service
public class myService{

   @Autowired
   private Monitor monitor;

   public List getSomething(){
       return monitor.getList();
   }
}


@Service
public class myStatefulService{

   //This field will be populated for sure by someone before getSomething() is called
   private List list;

   public synchronized List getSomething(){
       return this.list;
   }

   //Called by other services that self inject this bean 
   public synchronized void addToList(Object o){
      this.list.add(o);
   }
}

调试变量monitor在 getList 调用期间我得到

monitor => instance of correct class
 fields:
   CGLIB$BOUND => true
   CGLIB$CALLBACK_0.advised => proxyFactory (correct)
   CGLIB$CALLBACK_1.target (reference to the correct instance of myStatefulService class)
        fields:
          list => [.........] (correctly populated)
   CGLIB$CALLBACK_2 ..... 
   ......
   ......
   ......
   list => [] (the list that would be populated is empty instead)

您好奇还是有一些实际问题?不过这里有一个解释。

当使用CGLIB代理类时,Spring将创建一个名为类似的子类myService$EnhancerByCGLIB。这个增强的类将覆盖一些(如果不是全部)业务方法,以围绕实际代码应用横切关注点。

真正的惊喜来了。这个额外的子类不会调用super基类的方法。相反,它创建了第二个实例myService并代表出席。这意味着您现在有两个对象:您的真实对象和指向(包装)它的 CGLIB 增强对象。

增强类只是一个虚拟代理。它仍然具有与您的基类相同的字段(从它继承),但它们没有被使用。你打电话时addToList() on myService$EnhancerByCGLIBobject 它首先会应用一些AOP逻辑,调用addToList() of myService(它包装)并在返回时应用剩余的 AOP 逻辑。这myService$EnhancerByCGLIB.list领域从未被触及。

为什么 Spring 不能使用相同的类和委托super?我想为了简单起见:首先创建“raw" bean,然后在后处理期间应用 AOP 代理。

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

spring singleton bean 字段未填充 的相关文章

  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp

随机推荐

  • UILongPressGestureRecognizer 不工作

    我想检测UILongPressGestureRecognizer为了UIWebView点击并按住 这样当我长按近3秒时 就会出现以下内容if条件应该是True那么只有 if navigationType UIWebViewNavigatio
  • 如何阻止会话

    当导航到 Facebook 社交网络时 我发现我可以打开 2 个帐户 1 个在 Firefox 中 另一个在 Internet Explorer 中 或者可能是多个帐户 这不太好 因为 Facebook 政策只允许同时打开一个会话 启动会话
  • 将 Devexpress GridControl 动态添加到 C# Windows 应用程序

    我想动态添加 Devexpress GridControl 在运行时我想显示过滤器行 另外 我希望在具有动态创建的 GridControl 的同一窗体上有一个按钮 单击该按钮时 它应该显示网格控件的过滤器对话框弹出窗口 提供的示例可以满足您
  • 读取 bash 中具有默认值的变量

    我需要在 bash 脚本中从终端读取一个值 我希望能够提供用户可以更改的默认值 Please enter your name Ricardo 在此脚本中 提示是 请输入您的姓名 默认值为 Ricardo 光标将位于默认值之后 有没有办法在
  • 使用 Ghostscript 作为 x11 查看器(gs x11 视口定位)?

    我已经知道了Ghostscript 前端 http en wikipedia org wiki Ghostscript Front ends观众 但我想知道如何gs本身可以用来查看PDF文档吗 我能得到的最接近的是明确指定x11窗口作为输出
  • 当有匹配时,使用 MERGE 后如何获取标识值?

    假设我有一个带有身份字段的表 如果记录尚不存在 我想在其中插入一条记录 在下面的示例中 我检查存储在 Field1 中的值是否已存在于表中 如果没有 我插入一条新记录 表的定义 MyTable MyTableId int Identity
  • 解码字符串中的“=C3=A4”

    我尝试了很多不同的方法来正确显示我的字符串 但我无法使其工作 这就是字符串 f C3 A4hrt German word f hrt 我的文件以 utf 8 编码 该文件在 Joomla 中加载 我都尝试过 geschichte gt in
  • Elastic BeanStalk EC2 实例的日志耗尽了整个磁盘空间

    我有一个 Elastic BeanStalk 环境 在 1 个 EC2 实例上运行我的应用程序 当我最初配置环境时 我添加了负载均衡器 但从那时起我将其设置为仅使用 1 个实例 在容器内运行的应用程序显然会产生大量日志 几天后它们会耗尽整个
  • 如何使用 React hook 检测 Next.js SSR 中的窗口大小?

    我正在使用 Next js 构建一个应用程序反应日期 https github com airbnb react dates 我有两个组件日期范围选择器组件和DayPickerRangeController成分 我想渲染日期范围选择器当窗口
  • 将动态二维数组传递给函数

    我正在用 C 编写一个 n x n 矩阵乘法程序 其中 a 和 b 是输入 x 是输出 a b 和 x 已分配 但我不确定如何正确地将指针传递给乘法函数 下面是我想做的事情的概述 void multiplication float a fl
  • 如何在不冒失去对称属性的风险的情况下用hibernate实现equals?

    在阅读了 再次 很久以前就应该这样做 正确实现 equals 和 hashcode 后 我得出了这些结论 这对我有用 如果是 JDK 7 之前的版本 更喜欢使用 Apache commons equalsbuilder 和 hashcode
  • Java内部类和私有字段的可见性

    直到今天我才意识到这一点 但在 Java 中 私有字段在内部类上并不是真正私有的 您可以实例化一个类并访问这些字段 就好像它们是公共的一样 我的问题是为什么这是用 Java 完成的 哪些设计决策导致了封装的破坏 允许这样做有什么好处吗 pu
  • 转换为同一个类时出现 ClassCastException

    我有 2 个不同的 Java 项目 其中一个有 2 个类 dynamicbeans DynamicBean2 and dynamic Validator 在另一个项目中 我动态加载这两个类并将它们存储在Object class Form C
  • 字符串仅包含给定的字符集

    我需要知道给定的字符串是否是有效的日期时间格式字符串 因为该字符串可能代表其他内容 我尝试了 DateTime ParseExact somedate ToString format format 认为它会因无效格式而呕吐 但事实并非如此
  • 从匿名函数作用域中提取数据

    由于此应用程序的复杂性 我需要包装 Facebook API 调用 如下所示 In main file read is always undefined var read fb connect readStream In fb wrappe
  • 算法帮忙!与其伙伴一起搜索字符串的快速算法

    我正在寻找一种用于在巨大字符串中进行搜索的快速算法 它是由数亿到数十亿个字符组成的生物体基因组序列 该字符串中仅存在 4 个字符 A C G T 并且 A 只能与 T 配对 而 C 与 G 配对 现在我正在搜索两个可以反向并行配对的子字符串
  • 在 Markdown 上使用 Pandoc 时,如何从 YAML 标头中更改 PDF 输出字体?

    是否有一种 内置 方法可以设置在 Pandoc YAML 标头中使用的不同字体 或多种字体 理想情况下 我会在 Markdown 文件的 YAML 标头中执行类似的操作 font MySansSerifFontName 我在 Linux U
  • jslint --edition=latest 意外的 ES6 功能。常量

    我正在尝试使用node jslinthttps github com reid node jslint https github com reid node jslint为了保持我的代码干净 我的 nodejs 脚本中有一个 const 但
  • 诺基亚 6300 出现应用程序错误

    我正在使用这段代码来连接 Servlet 尝试访问互联网时的移动应用程序 手机中出现以下消息 允许网络访问 是或否 如果我在诺基亚 6300 中对该消息单击 否 则会出现 应用程序错误 警告 并且会自动关闭该应用程序 我尝试过其他诺基亚手机
  • spring singleton bean 字段未填充

    我需要一个带有一些内部字段的服务 单例 比如待处理线程的列表 是的 所有内容都被编写为线程安全的 问题是 如果我 autowire这个 bean 的字段似乎是空的 调试我发现代理正确绑定到实例 字段CGLIB CALLBACK X正确链接到