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;
        }
    
    }
  • 相关阅读:
    mysql面试题
    Excel下载打不开
    Linux安装jdk1.8和配置环境变量
    Linux压缩、解压文件
    Linux常用命令1
    VMware下载安装及CentOS7下载安装
    ueditor的简单配置和使用
    linux的tomcat服务器上部署项目的方法
    TortoiseSVN客户端的使用说明
    CentOS 6.5系统上安装SVN服务器
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9065798.html
Copyright © 2011-2022 走看看