как расширить метод afterPropertiesSet () - PullRequest
1 голос
/ 08 декабря 2011

В моей весенней конфигурации я определяю боб

bean id="com.companyName.schedulerBean"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"

Я хочу расширить логику метода SchedulerFactoryBean.afterPropertiesSet(). Есть ли способ сделать это?

Например, сейчас SchedulerFactoryBean.afterPropertiesSet() делает логику:

  1. инициализировать schedulerFactory и Scheduler
  2. registerJobDetails

Я хочу такой метод логики:

  1. инициализировать schedulerFactory и Scheduler
  2. удалить существующие вакансии
  3. registerJobDetails

Заранее спасибо.

p.s. Извините за мой английский.

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

К сожалению, вы не можете расширять методы так, как хотите. При условии, что методы не являются частными или окончательными, вы можете переопределить их в подклассах и вызвать метод суперкласса, используя super:

 public void someMethod() {
   //you can add code here
   super.someMethod();
   //or here
 }

В этом случае вы можете добавить код до или после вызова super.someMethod(). Однако вы не можете добавить код между ними.

Таким образом, при таком подходе вы можете достичь следующего:

remove existing jibs //jobs instead of jibs? In that case this position might not make much sense
initialize schedulerFactory and Scheduler    
registerJobDetails

или это

initialize schedulerFactory and Scheduler    
registerJobDetails
remove existing jibs

Если метод, в который вы хотите добавить код между вызовами, вызывает некоторые другие внутренние методы, вы можете попытаться переопределить один из них (они могут даже быть разработаны для этого). В качестве альтернативы вы можете использовать AOP и создать точечный разрез для метода, который вызывается внутри.

В случае, если нет внутренних вызываемых методов для переопределения, единственное другое решение - это скопировать содержимое SchedulerFactoryBean.afterPropertiesSet() и добавить ваш код между ними.

Однако это не рекомендуется, поэтому я бы предпочел либо добавить код до или после вызова super (если возможно), либо переопределить метод, вызываемый внутри.

1 голос
/ 08 декабря 2011

Попробуйте создать свой собственный CustomSchedulerFactoryBean, расширяющий SchedulerFactoryBean. Создайте BeanFactoryPostProcessor для замены ссылок SchedulerFactoryBean вашим классом CustomSchedulerFactoryBean, как объяснено здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...