@Value 不在扩展其他类的类中工作

2024-01-08

是否可以使用@Value在扩展另一个类的类中?

下面是相关的代码片段。在里面Lo_Controller类它工作完美,但在Lo_DisplayHandler总是返回null。我能想到的唯一原因是因为它依赖于另一个类,该类没有用注释@Component。如果这是原因,建议从属性文件中读取值的选项是什么,类似于@Value?

只是为了测试一下,我从@Component to @Controller in Lo_DisplayHandler看看它们是否以某种方式彼此相关,但是它返回null以及。

这有效:

package com.ma.common.controller;
imports ...

@Controller
@RequestMapping("/log")
public class Lo_Controller {
       @Value("${log.display.lastpage}")
       private String lastPageUrl;
...

这总是返回null:

package com.ma.log.handler;
imports ...
@Component
public class Lo_DisplayHandler extends Lo_Handler {
       public Lo_DisplayHandler() {
              super();
       }
       @Value("${log.display.lastpage}")
       private String lastPageUrl;
... 

mvc-dispatcher-servlet.xml

<context:component-scan base-package="com.ma.common.controller, com.ma.log.handler" />
<context:property-placeholder location="classpath:restServices.properties"/>

<mvc:annotation-driven />
<mvc:resources mapping="/**" location="/" />


@Component
public class Lo_DisplayHandler extends Lo_Handler {

       @Value("${log.display.lastpage}")
       private String lastPageUrl;

       public void anyOtherMethod(){
              String _a = lastPageUrl; //FAIL - always null
       }

       @PostConstruct
       public void initIt() throws Exception {
              String _a = lastPageUrl; //OK - when the application is deployed and started for the first time
       }

       @PreDestroy
       public void cleanUp() throws Exception {
              String _a = lastPageUrl; //OK - when the application is stopped
       }

web.xml

       <servlet>
              <servlet-name>mvc-dispatcher</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
       </servlet>

       <servlet-mapping>
              <servlet-name>mvc-dispatcher</servlet-name>
              <url-pattern>/</url-pattern>
       </servlet-mapping>

       <context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
       </context-param>

       <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
       </listener>

这里三个可能的问题:

首先,我不鼓励扩展类,因为 Spring 可以更好地自动装配依赖项。但它应该有效 其次,您必须关注 bean 的生命周期。该属性将在实例化后设置。 @PostConstruct 验证内容。 第三,财产所有者在等级背景下的可见性并不直接。因此,如果您在根 applicationContext 中定义 @value,则它不会由您的 DispatcherServlet 上下文设置。要测试它,请注入在根级别定义的 bean 的依赖项,您将看到您的 @Value 将被考虑在内。

可以从同一上下文中的 bean 访问 lastPageUrl 属性(通过推送创建或拉取创建)。 在推送创建的情况下,如果另一个 bean 自动装配 Lo_DisplayHandler bean 并调用您的方法 anyOtherMethod(),它将获取该值。

@Component
public class ScannableIntoYourContext{

    @Autowired
    private Lo_DisplayHandler myHandler;

}

另一种方法是从 ObjectFactory 中提取 bean。

@Autowired
private ObjectFactory<Lo_DisplayHandler> bean;

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

@Value 不在扩展其他类的类中工作 的相关文章

随机推荐

  • 表单中的背景颜色

    我试图为 HTML 表单标签设置背景颜色 但它不起作用 我以为这是一个简单的任务 form background color 000 padding 10px 您可以使用内联样式
  • iPhone,如何检测拍摄图像时的方向

    有什么方法可以检测拍摄图像时手机的方向吗 我在 UIView 上有一个 UIImageView 我正在使用 UIImagePicker 来拍照或从相机胶卷中选择一张照片 但是 如果图像是在横向模式下拍摄的 我想检测到这一点并调整图像视图的大
  • 异步 - 留在当前线程上?

    我读过埃里克 利珀特的article http blogs msdn com b ericlippert archive 2010 10 29 asynchronous programming in c 5 0 part two whenc
  • 设置 Vaadin 会话超时参数

    我正在使用 Vaadin 7 1 7 但我不知道如何设置session timeout参数 例如 1 分钟 据我所知 Vaadin 7 x x 不会产生web xml 它用 VaadinServletConfiguration注释 但似乎没
  • 如何使用 browserify 包含非节点模块

    我想在应用程序中使用依赖项管理 并遇到了 require js 和 browserify 我无法决定选择哪一个 这将是一个决定性因素 任何人都可以告诉我如何将定制的 javascript 模块 非节点模块 包含到我的 js 中 我发现 br
  • Android 上的自定义鼠标指针

    当使用现代版本的 Android Honeycomb 或更高版本 时 如果硬件合适 则支持显示鼠标指针 例如 在 ASUS Transformer 或 Toshiba AC100 笔记本电脑上 是否有任何 API 允许在这些设备之一上运行的
  • 如何使用 Mocha 和 Nock 重新测试相同的 URL?

    我正在使用 Mocha Chai Sinon Proxyquire 和 Nock 对于这个特定的测试场景 针对该场景提出这个问题 希望多次测试完全相同的 URL 每次都在一个单独的测试中 期望得到不同的响应 例如 没有商家 Feed 的响应
  • “漂白”文件中的这个 perl 行有什么作用?

    我有一些已被 漂白 的 perl 文件 不知道它是否来自 ACME Bleach 或类似的东西 我对 Perl 不太熟悉 我想了解启动文件的单行代码如何解码后面的空格 lt lt y r n d pack b eval die 文件的其余部
  • Spring security ldap:找不到元素“ldap-authentication-provider”的声明

    遵循 spring security 文档 http static springsource org spring security site docs 3 0 x reference ldap html http static sprin
  • 如何使用 ng-click 获取 DOM 元素

    我有一些元素 例如
  • add_axes 和 add_subplot 之间有什么区别?

    在之前的一个answer https stackoverflow com a 43283905有人推荐我使用add subplot代替add axes正确显示轴 但搜索文档我无法理解何时以及为何应该使用这些函数之一 谁能解释一下这些差异吗
  • Python 中 numpy 整数数组的整数和元素的类型提示

    我有一个函数应该接受带有整数值的参数 比方说 def print age in another format age int gt float 但是 此代码适用于以下环境 numpy被大量使用 因此用户可能会编写如下内容 a np arra
  • 构造函数中冒号后面的变量[重复]

    这个问题在这里已经有答案了 我仍在学习 C 并试图理解它 我正在查看一些代码并看到 point3 float X float Y float Z x X y Y z Z lt what is this used for 构造函数参数旁边的
  • 在 jQuery 中获取下一个兄弟的最简洁的方法

    http jsfiddle net mplungjan H9Raz http jsfiddle net mplungjan H9Raz 经过对 next a 等的相当多的测试 我终于找到了一个有效的 我只是想知道为什么 next a 没有
  • 强制方向改变有时不起作用

    当在我的应用程序中按下某个按钮时 视图应该将方向从纵向更改为 景观 当用户回来时 视图控制器应该变回纵向 但 有时方向不会改变或使用了错误的视图框架 这是我的代码 void btnSignClicked CustomSignButton b
  • SQL Server:使用带 ISOWK 参数的 DATEPART 将一周的第一天更改为星期日

    我需要得到周数对于某些日期集 例如 对于 2016 年 1 月 它应该类似于 Week Number 53 lt for dates from Jan 1 to Jan 2 1 lt for dates from Jan 3 to Jan
  • 我的一项迁移未在 Laravel 4 中使用 php artisan 命令运行

    我在 Laravel 4 中运行了几个迁移 我使用php artisan migrate rollback and php artisan migrate用于填充表的命令 有趣的是 我的一项迁移已停止工作 无法回滚 所有其他人都工作正常 据
  • 如何在 Dart 中到达最后一个午夜?

    我想这在大多数语言中都是很常见的任务 但是我不清楚如何在我的 Flutter 应用程序中完成此任务 如何在 Dart 中检索最后一个午夜的 DateTime 对象 或者可能是今天 明天 昨天的任何特定时间 这应该做同样的事情 var now
  • 使用绑定挂载运行容器化 MongoDB

    我在 OCI 容器 docker io library mongo 中运行 MongoDB 我想在容器内的 data db 处挂载一个主机目录 Kubernetes 术语中的 hostPath 挂载 我在 Fedora Silverblue
  • @Value 不在扩展其他类的类中工作

    是否可以使用 Value在扩展另一个类的类中 下面是相关的代码片段 在里面Lo Controller类它工作完美 但在Lo DisplayHandler总是返回null 我能想到的唯一原因是因为它依赖于另一个类 该类没有用注释 Compon