• 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;
        }
    }
  • 相关阅读:
    mysql升级大致
    初始化配置文件的使用:/etc/my.cnf
    mysql用户管理
    MySql的逻辑结构(抽象结构)与物理结构
    5.7与5.6版本在部署方面的改变
    MySql服务器进程结构
    MySql服务器构成 --实列
    mysql客户端与服务器端模型
    RDBMS和NoSQL区别即主流sql
    MySql基本操作
  • 原文地址:https://www.cnblogs.com/moris5013/p/11081924.html
Copyright © 2020-2023  润新知