• Spring中的AOP实现思路


    AOP是面向切面编程,为什么在切面中写一个注解方法@Before,这个方法会在目标方法前面执行呢

    基于JDK动态代理实现上面说的情况

    自定义注解

    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ExtBefore {
        String value() default "";
    }

    切面类,里面定义了一个注解方法

    public class Aspect {
    
        @ExtBefore
        public void before() {
            System.out.println("beforeMethod ..... ");
    
        }
    
    }

    测试类

     private  static Object getProxy(final Object target ,  Object  aspect) 
    这个方法传入的是要代理的目标类,和切面类。这样就可以在目标方法前和后执行我们在切面类加了注解的方法
    public class ProxyTest {
    
        public static void main(String[] args) {
            
            List target = new ArrayList<String>();
            Collection proxy = (Collection)getProxy(target, new Aspect());
            System.out.println(proxy.add("A"));
            
        }
        
        
        private  static Object getProxy(final Object target ,  Object  aspect) {
            Object proxy  =  Proxy.newProxyInstance(target.getClass().getClassLoader(), 
                    new Class[]{Collection.class},  new InvocationHandler() {
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            //调用切面中before方法
                            Class<?> clazz = aspect.getClass();
                            Method[] methods = clazz.getDeclaredMethods();
                            for(Method m : methods) {
                                if(m.getDeclaredAnnotation(ExtBefore.class) != null) {
                                    m.invoke(aspect);
                                }
                            }
                            //目标方法
                            Object retVal = method.invoke(target, args);
                            return retVal;
                        }
                    });
            return proxy;
        }
    }
  • 相关阅读:
    细说java中的类
    使用LayUI操作数据表格
    使用LayUI展示数据
    一步一步做搜索(一)
    试图加载格式不正确的程序
    自己实现spring核心功能 三
    SpringMvc请求处理流程与源码探秘
    设计模式之代理模式
    爬虫功能介绍
    爬虫监控帮助文档汇总
  • 原文地址:https://www.cnblogs.com/moris5013/p/11081924.html
Copyright © 2020-2023  润新知