@Async @Retryable @Transactional 内部使用失效aop问题解决

问题原因:由于aop动态代丽问题,注解实例获取为代理类,导致注解不能正常使用导致此问题。

解决思路:手动获取实体类进行执行,使用application.getBean()方式获取

代码:

@Slf4j
@Component
public class SpringContextUtil implements ApplicationContextAware {

// Spring应用上下文环境
private static ApplicationContext applicationContext;

/**
* 实现ApplicationContextAware接口的回调方法。设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}

/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
*
* @param name
* @return Object
* @throws BeansException
*/
public static <T> T getBean(Class<T> name) throws BeansException {
return applicationContext.getBean(name);
}

}
常见问题:applicationContext为空 缺少Component注解导致 之后调用即可 例:
SpringContextUtil.getBean(a.class).doSome();
对应dosome方法类注解即可生效

 

posted @ 2022-06-23 16:39  老小包的博客  阅读(809)  评论(0编辑  收藏  举报