【问题标题】:How to enable Java object to access Spring property value?如何使 Java 对象能够访问 Spring 属性值?
【发布时间】:2017-02-22 10:08:08
【问题描述】:

在我的一个 Spring xml 属性文件中,我有以下 bean:

<bean class="com.project.TimerBean">
    <property name="delay" value="30000" />
    <property name="interval" value="60000" />
    <property name="invokeThis" value="com.project.TargetClass" />
    <property name="receiver" value="XYZ" />
</bean>

本质上,TimerBean 用于在指定值内调用TargetClass。在此属性文件中声明了 TimerBean 的其他几个实例。

现在我需要TargetClass 来访问interval 的值。最好的方法是什么?

编辑#1:为了澄清我的情况,TimerBean 本质上创建了一个TargetClass 类型的对象,TargetClass 中的一些代码运行,然后这个对象在稍后的执行中使用。很难具体说明,主要是因为我将所有不同的 bean 归为 TargetClass 类别,并且它们每个都做不同的事情。它们唯一的共同点是属性文件中的这种初始化。

【问题讨论】:

  • 你的目标bean在哪里?你的 TimerBean 中没有暴露吸气剂吗?
  • 我的猜测是 TargetClass 没有被声明为 bean,我也相信你所说的“调用”目标类的意思是你正在调用该类中的静态方法。是这样吗?
  • 澄清了这个问题,希望 - @AndreiBalici
  • 为您提供了应该解决您问题的答案

标签: java spring properties-file


【解决方案1】:

感谢您的澄清。 为什么不使用 Java 的反射来完成任务呢?

如果你知道完全限定的类名,你可以像这样实例化一个对象:

Object instance = Class.forName("com.project.TargetClass").newInstance();

如果需要运行的代码在构造函数中,那么你的目的就达到了。

但是,如果您需要运行该实例的特定方法:

Method method = instance.getClass().getDeclaredMethod("methodName");
method.invoke(instance);

希望这会有所帮助!

【讨论】:

  • 别忘了给答案点赞 :)。谢谢
【解决方案2】:

我会在 Spring 组件中做这样的事情:

@Component
public class MyClass {

  @Autowired
  com.project.TimerBean timerBean;

  public void myFunc() {
      System.out.println(timerBean.getInterval());
  }
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2016-12-18
    相关资源
    最近更新 更多