2017-02-22 27 views
0

В одном из моих Spring XML файлов свойств, у меня есть следующий компонент:Как включить объект Java для доступа к значению свойства Spring?

<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. Каков наилучший способ сделать это?

EDIT # 1: Чтобы уточнить мою ситуацию, TimerBean по существу создает объект типа TargetClass, запускается некоторый код внутри TargetClass, а затем этот объект используется позже при выполнении. Трудно быть конкретным в основном потому, что я собираю все разные бобы в эту категорию TargetClass, и каждый из них делает разные вещи. Единственное, что у них есть, это инициализация в файле свойств.

+0

Где находится ваша целевая фасоль? Разве у вас нет доступа в вашем TimerBean? – SMA

+0

Я предполагаю, что TargetClass не объявлен как bean-компонент, и я также считаю, что то, что вы подразумеваете под «вызовом» целевого класса, заключается в том, что вы вызываете статический метод в этом классе. Это правильно? –

+0

Уточненный вопрос, надеюсь - @AndreiBalici – ohseekay

ответ

0

Спасибо за разъяснение. Почему вы не используете отражение Java для достижения своей задачи?

Если вы знаете полное имя класса, вы можете создать экземпляр объекта, как это:

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

Если код, который должен быть побежал в конструкторе, вы достигли своей цели.

Если вам нужен, однако, для выполнения конкретного метода этого экземпляра:

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

Надеется, что это помогает!

+0

, не забудьте также направить ответ :). благодаря –

0

Я хотел бы сделать что-то вроде этого в течение весны компоненты:

@Component 
public class MyClass { 

    @Autowired 
    com.project.TimerBean timerBean; 

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