定义一个根据条件进行数据源切换的自定义注解。
一、 定义注解类
就这样子:

类可自定义参数,类似于:

二、 AOP实现注解功能
@Aspect
@Order(-1)
@Component
public class DataSourceFilterAspect {
@Resource
private DataSourceFilterService dataSourceFilterService;
/**
* 设置切入点
*/
@Pointcut("execution(* com.demo.service.impl.*.*(..))")
public void pointCut(){}
/**
* 执行方法前更换数据源
*/
@Before("pointCut()")
public void doBefore(JoinPoint point) throws IOException {
// 通过切入点获取目标类和方法
Class<?> target = point.getTarget().getClass();
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
// 注解出现在类上或方法上时,对非私有成员生效
if ((target.isAnnotationPresent(DataSourceFilter.class))
|| (method != null && method.isAnnotationPresent(DataSourceFilter.class)) ) {
// 自定义数据源切换方法
dataSourceFilterService.setDataSource();
}
}
}
ps:AOP对类内部调用及私有方法不生效
本文介绍了如何通过定义一个自定义注解`DataSourceFilter`,结合Spring AOP在执行方法前后动态切换数据源。在切入点`execution(*com.demo.service.impl.*.*(..))`匹配的方法中,如果类或方法带有该注解,就会调用`DataSourceFilterService`来切换数据源。需要注意的是,AOP不会对类内部调用和私有方法生效。
1900

被折叠的 条评论
为什么被折叠?



