package com.qianwen.core.tenant.dynamic;
|
|
import org.aopalliance.aop.Advice;
|
import org.springframework.aop.Pointcut;
|
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
|
import org.springframework.aop.support.AbstractPointcutAdvisor;
|
import org.springframework.aop.support.ComposablePointcut;
|
import org.springframework.beans.BeansException;
|
import org.springframework.beans.factory.BeanFactory;
|
import org.springframework.beans.factory.BeanFactoryAware;
|
import org.springframework.lang.NonNull;
|
|
|
public class TenantDataSourceGlobalAdvisor extends AbstractPointcutAdvisor implements BeanFactoryAware {
|
private final Advice advice;
|
private final Pointcut pointcut = buildPointcut();
|
|
public TenantDataSourceGlobalAdvisor(@NonNull TenantDataSourceGlobalInterceptor tenantDataSourceGlobalInterceptor) {
|
this.advice = tenantDataSourceGlobalInterceptor;
|
}
|
|
@NonNull
|
public Pointcut getPointcut() {
|
return this.pointcut;
|
}
|
|
@NonNull
|
public Advice getAdvice() {
|
return this.advice;
|
}
|
|
public void setBeanFactory(@NonNull BeanFactory beanFactory) throws BeansException {
|
if (this.advice instanceof BeanFactoryAware) {
|
((BeanFactoryAware)this.advice).setBeanFactory(beanFactory);
|
}
|
|
}
|
|
private Pointcut buildPointcut() {
|
|
AspectJExpressionPointcut cut = new AspectJExpressionPointcut();
|
cut.setExpression("(@within(org.springframework.stereotype.Controller) || @within(org.springframework.web.bind.annotation.RestController)) && (!@annotation(org.springblade.core.tenant.annotation.NonDS) && !@within(org.springblade.core.tenant.annotation.NonDS))");
|
return (Pointcut)new ComposablePointcut((Pointcut)cut);
|
}
|
}
|