2011-12-08 41 views
1

以我彈簧配置我定義豆如何擴展方法的afterPropertiesSet()

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

我想延長方法SchedulerFactoryBean.afterPropertiesSet()的邏輯。 如果有什麼辦法可以做到這一點?

例如現在SchedulerFactoryBean.afterPropertiesSet()不邏輯:

  1. 初始化schedulerFactory和調度
  2. registerJobDetails

我想這樣的方法的邏輯:

  1. 初始化schedulerFactory和調度
  2. 刪除現有作業
  3. registerJobDetails

在此先感謝。

p.s.對不起我的英語不好。

回答

0

嘗試創建自己的CustomSchedulerFactoryBean擴展SchedulerFactoryBean。創建一個BeanFactoryPostProcessor,用你的CustomSchedulerFactoryBean類替換SchedulerFactoryBean引用here

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之前或之後添加代碼(如果可能)或覆蓋內部調用的方法。