通过对接口拦截实现流水入库操作
1 对接口进行JDK动态代理 实现入库操作
2 实现 BeanPostProcessor 接口 对实现Authentication接口的实现类 进行代理
1 定义一个接口
public void Authentication{
public boolean auth();
}
2 实现 Authentication 接口
@Service
public class RealNameAuth implements Authentication{
@Override
public boolean auth() {
return true;
}
}
3 对Authentication 做JDK动态代理
public class AuthRecordInvocationHandler implements InvocationHandler{
private Authentication auth;
public AuthRecordInvocationHandler (Authentication auth){
this.auth = auth;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
boolean flag = (boolean) method.invoke(auth, args);
//入库
if(flag){
System.out.print("认证成功");
}else{
System.out.print("认证失败");
}
return flag;
}
}
4 实现 BeanPostProcessor 接口
BeanPostProcessor 在bean 初始化前后对bean进行扩展操作
@Service
public class AuthRecordBeanPostProcessor implements BeanPostProcessor,Ordered {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
@SuppressWarnings("rawtypes")
Class[] clazz = {Authentication .class};
if(bean instanceof Authentication ){
AuthRecordInvocationHandler authRecordInvocationHandler = new AuthRecordInvocationHandler ((Authentication )bean);
return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), clazz, authRecordInvocationHandler );
}
return bean;
}
//优先级最低
public int getOrder() {
return Integer.MAX_VALUE;
}
}