zoukankan      html  css  js  c++  java
  • 参考Shiro的自定义基于Spring的AOP横切模式

    概要

    创建一个切入点PointcutAdvisor继承Spring的StaticMethodMatcherPointcutAdvisor

    创建一个MethodInterceptor方法拦截器org.aopalliance.intercept.MethodInvocation

    setAdvice(MethodInvocation mi)设置通知时传入一个MethodInterceptor方法拦截器

    调用Demo

    package com.wjz.demo;
    
    import org.springframework.aop.framework.ProxyFactory;
    
    import com.wjz.spring.CustomPointcutAdvisor;
    
    public class AopDemo {
    
        public static void main(String[] args) {
            ProxyFactory proxyFactory = new ProxyFactory();
            proxyFactory.addAdvisors(new CustomPointcutAdvisor());
            proxyFactory.setTarget(new Foo());
            Foo fooProxy = (Foo) proxyFactory.getProxy();
            fooProxy.foo("wjz");
        }
    }

    PointcutAdvisor切入点

    package com.wjz.spring;
    
    import java.lang.reflect.Method;
    
    import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor;
    
    /**
     * 自定义方法切入点
     * @author wjz
     *
     */
    @SuppressWarnings("serial")
    public class CustomPointcutAdvisor extends StaticMethodMatcherPointcutAdvisor {
    
        public CustomPointcutAdvisor() {
            setAdvice(new CustomMethodInterceptor());
        }
        
        @Override
        public boolean matches(Method method, Class<?> targetClass) {
            if ("foo".equals(method.getName())) {
                return true;
            }
            return false;
        }
    
    }

    MethodInterceptor方法拦截器

    package com.wjz.spring;
    
    import java.lang.reflect.Method;
    
    import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;
    
    /**
     * 自定义方法拦截器
     * @author wjz
     *
     */
    public class CustomMethodInterceptor implements MethodInterceptor {
    
        @Override
        public Object invoke(MethodInvocation invocation) throws Throwable {
            System.out.println("invoke method before");
            
            Object arg = invocation.getArguments()[0];
            System.out.println("arg " + arg);
            
            Object ti = invocation.getThis();
            System.out.println("this " + ti);
            
            Method method = invocation.getMethod();
            System.out.println("method " + method);
            
            System.out.println("toString " + toString());
            
            Object result = invocation.proceed();
            System.out.println("invoke method after");
            return result;
        }
    
    }
  • 相关阅读:
    封装函数通过输入(元素,属性,目标值)改变div样式
    unicode键盘编码表
    js中的索引值
    JavaScript的三大组成部分
    阿望教你用vue写扫雷(超详细哦)
    关于换行以及换行属性
    html中的a标签详解
    利用GitHub Pages + jekyll快速搭建个人博客
    本博客文章转载,请注明出处
    git clone克隆项目太慢,或者直接导致克不下来的解决办法(转载请注明出处)
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9065798.html
Copyright © 2011-2022 走看看