spring 对接口进行代理

通过对接口拦截实现流水入库操作

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;
    }

}

转载于:https://my.oschina.net/zhuzhenyu/blog/3029836

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值