手写@Async注解
-
aop拦截只要在我们的方法上有使用到我们自己定义的注解,就单独开启一个异步线程去执行我们的目标方法
启动类
package com.cyz;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* @Author lian-chen
* @Date 2021/7/22 8:45
*/
自定义注解
package com.cyz.annocation;
import java.lang.annotation.*;
/**
* @Author lian-chen
* @Date 2021/7/28 8:45
*/
aop实现
package com.cyz.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* @Author lian-chen
* @Date 2021/7/28 8:44
*/
异步方法组件
package com.cyz.async;
import com.cyz.annocation.LianChenAsync;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @Author lian-chen
* @Date 2021/7/28 8:29
*/
业务方法
package com.cyz.service;
/**
* @Author lian-chen
* @Date 2021/7/28 8:33
*/
public interface TestService {
void getAsync();
}
package com.cyz.service.impl;
import com.cyz.async.AsyncManage;
import com.cyz.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Author lian-chen
* @Date 2021/7/28 8:33
*/
接口
package com.cyz.controller;
import com.cyz.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author lian-chen
* @Date 2021/7/22 8:44
*/
开始执行
2021-07-28 08:56:24.890 INFO 9640 --- [nio-8080-exec-1] com.cyz.aop.ExtThreadAsyncAop : 环绕执行=====
结束执行
2021-07-28 08:56:24.933 INFO 9640 --- [ Thread-17] com.cyz.async.AsyncManage : 目标异步方法执行====
异步执行