六、提取 Bean 的函数进行定制开发
为什么需要提取Bean的函数?绝不是闲得淡疼。比如:定时任务的 "@Scheduled"、"@CloudJob"。这些都是要提取 Bean 的函数并定制加工的。
提醒:Bean 的函数提取,只对使用 @Component 注解的类有效。
1、比如提取 @Scheduled 注解的函数,并注册到执行器
定义注解类:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Scheduled {
String name() default "";
String cron() default "";
...
}
注册 "@Scheduled" 对应的处理能力:
public class XPluginImp implements Plugin {
@Override
public void start(AppContext context) {
//注册提取器
context.beanExtractorAdd(Scheduled.class, (bw,method,anno)->{
JobHandler job = new JobMethodWrap(bw, method);
String jobId = bw.clz().getName() + "::" + method.getName();
String name = Utils.annoAlias(anno.name(), jobId);
JobManager.add(name, anno, job);
});
}
}
一顿简单操作后,Bean里的函数已经变成 “@Scheduled” 定时任务了。
2、应用
@Component
public class DemoJobBean {
/**
* 1、简单任务示例(Bean模式)
*/
@Scheduled(name="job1", cron="1/2 * * * * * ?")
public void job1() throws Exception {
//...
}
}
如果你不喜欢这个注解,也可以很快换成像:@CloudJob。通过提取器,将Method注册到它的执行器里就OK。