Spring中可以异步执行代码,注解方式是使用@Async注解。
原理、怎么使用,就不说了。
写2点自己遇到过的问题。
1.方法是公有的
// 通知归属人
@Async
public void notifyPusher(Project project) {
}
2.异步代码,需要放在外部单独的类中。
@Service("asyncBiz")
public class AsyncBiz {
@Async
public void notifyPusher(Project project) {
}
}
据说这是一个“常识”,外部方法才会被Spring拦截器拦截到额。
代码调用示例
@Service public class ProjectServiceImpl implements ProjectService{ public void audit(long id, short status) { if(project.getPusher() != null){ AsyncBiz asyncBiz = SpringContextUtil.asyncBiz(); asyncBiz.notifyPusher(project); asyncBiz.notifyCare(project); } } }
一个工具类
@Component public class SpringContextUtil implements ApplicationContextAware{ private static ApplicationContext ctx; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ctx = applicationContext; } public static ApplicationContext getCtx(){ return ctx; } public static Object getBean(String name) throws BeansException { return ctx.getBean(name); } public static AsyncBiz asyncBiz() throws BeansException { return (AsyncBiz) ctx.getBean("asyncBiz"); } }
可以灵活手动获得Spring容器中的bean,也可以很好地解决循环依赖问题。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-11 09:34:37