在我的spring配置中,我定义了bean
bean id="com.companyName.schedulerBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
我想扩展方法SchedulerFactoryBean.afterPropertiesSet()
的逻辑。
如果有办法吗?
例如,现在SchedulerFactoryBean.afterPropertiesSet()
执行逻辑:
我想要这样的方法逻辑:
提前致谢。
P.S。抱歉我的英文。
答案 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