从零手写并发框架(四)异步转同步 springboot 整合( 二 )

这里统一拦截指定了 @Sync 和 @SyncCallback 注解的方法 。
复用了原来的代理的实现 , 当然你可以重新实现 。
spring 整合验证在有了字节码增强的基础上 , 我们实现 spring 整合实际上非常简单 。
下面让我们验证一下实现是否符合我们的预期 。
maven 引入com.github.houbbsync-spring${project.version}入门测试配置类@EnableSync 注解启用 sync 特性 。
@Configurable@ComponentScan(basePackages = "com.github.houbb.sync.test.service")@EnableSyncpublic class SpringConfig {}业务代码和以前一样
@Servicepublic class UserService {String id = "";@Syncpublic String queryId() {System.out.println("开始查询");return id;}@SyncCallback(value = "http://kandian.youth.cn/index/queryId")public void queryIdCallback() {System.out.println("回调函数执行");id = "123";}}测试代码@ContextConfiguration(classes = SpringConfig.class)@RunWith(SpringJUnit4ClassRunner.class)public class SpringUserServiceTest {@Autowiredprivate UserService userService;@Testpublic void queryIdTest() {// 异步执行回调new Thread(new Runnable() {@Overridepublic void run() {try {System.out.println("开始异步执行回调");TimeUnit.SECONDS.sleep(2);userService.queryIdCallback();} catch (InterruptedException e) {e.printStackTrace();}}}).start();String id = userService.queryId();System.out.println("id: " + id);}}测试结果符合我们的预期 , 日志和上一节类似 , 此处就不再贴出 。
springboot 整合实现整合原理利用 spring-boot-starter , 在 spring.factories 文件中指定如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.github.houbb.sync.springboot.starter.config.SyncAutoConfig这样就可以在 springboot 启动的时候自动加载我们定义的配置类 。
SyncAutoConfig 配置package com.github.houbb.sync.springboot.starter.config;import com.github.houbb.sync.spring.annotation.EnableSync;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.context.annotation.Configuration;/** * 异步转同步自动配置 * @author binbin.hou * @since 0.0.3 */@Configuration@ConditionalOnClass(EnableSync.class)@EnableSyncpublic class SyncAutoConfig {}实现非常的简单 , 直接启用 @EnableSync 注解 。
【从零手写并发框架(四)异步转同步 springboot 整合】这样使用的时候只需要引入 jar , 就可以自定生效了 。
当然也可以和 springboot 的配置文件配合 , 提供更加灵活的配置 。
验证maven 引入com.github.houbbsync-springboot-starter${最新版本}配置@SpringBootApplicationpublic class SyncApplication {public static void main(String[] args) {SpringApplication.run(SyncApplication.class, args);}}只需要引入 jar 即可 , 业务类的定义和 spring 整合保持一致 , 然后就可以开始使用了 。
小结到这里我们就把同步框架整合 spring 和 springboot 基本完成了 。
回顾我们整个历程 , 从最开始的异步查询转同步的 7 种方式 , 到对其中几种常见的封装 , 然后是字节码结合注解的代理使用 , 最后是本节的 spring 的整合 。


推荐阅读