如何扩展方法afterPropertiesSet()

时间:2011-12-08 12:16:28

标签: java spring quartz-scheduler

在我的spring配置中,我定义了bean

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

我想扩展方法SchedulerFactoryBean.afterPropertiesSet()的逻辑。 如果有办法吗?

例如,现在SchedulerFactoryBean.afterPropertiesSet()执行逻辑:

  1. 初始化schedulerFactory和Scheduler
  2. registerJobDetails
  3. 我想要这样的方法逻辑:

    1. 初始化schedulerFactory和Scheduler
    2. 删除现有职位
    3. registerJobDetails
    4. 提前致谢。

      P.S。抱歉我的英文。

2 个答案:

答案 0 :(得分:3)

不幸的是,您无法以您想要的方式扩展方法。如果方法不是私有方法或最终方法,则可以在子类中覆盖它们并使用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 :(得分:1)

尝试创建自己的CustomSchedulerFactoryBean,扩展SchedulerFactoryBean。创建BeanFactoryPostProcessor以使用CustomSchedulerFactoryBean类替换SchedulerFactoryBean引用,如解释here