关于ServiceLoader注意事项
Bask的软件通常都是利用【SPI】实现相关接口的开放,在使用ServiceLoader的时候,如果项目整合了Spring,需要注意的是在SPI创建这个ServiceLoader的时候,Spring还未完成初始化,所以以下的用法并不是你想想的那样可以生效的:
   public class TaskDataset extends BeanDataset {
    //spring中的annotation标记不会起作用
    @Value("smtp.user")
    private String smtpUser;
    //spring中的annotation标记不会起作用
    @Autowired
    private DataService dataservice;
    //直接通过Spring的ApplicationContext获取Bean也是不行的
    private UserService userService = SpringUtils.getBean(UserService.class);    
    ...
    }
正确的做法应该是在方法的内部去访问Spring的资源,例如:
   public class TaskDataset extends BeanDataset {
    @Override
    public List<Field> getFields() {
        FieldService fieldService = SpringUtils.getBean(FieldService.class)
        ...
    }
    ...
    }