zoukankan      html  css  js  c++  java
  • spring08

    这里主要学习的是关于spring之后中与ioc不同的aop技术;面向切面编程是spring基石之一;

    解决代码混乱文体,代码分散,当部分修改时,要逐个修改当更多的日志以及验证介入之后会使代码变得更加的混乱不好维护。

     使用aop之前的关于的相关操作(相对于比较复杂)

    具体的代码如下:

    package aop;
    
    public interface AtithmeticCalculator {
    int add(int i,int j);
    int sub(int i,int j);
    int mul(int i,int j);
    int div(int i,int j);
    }
    package aop;
    
    public class AtithmeticCalculatorImpl implements AtithmeticCalculator {
    
        @Override
        public int add(int i, int j) {
    //        System.out.println("the method add begin>>>>>>>>");
            // TODO Auto-generated method stub
            int result=i+j;
    //        System.out.println("the method add end>>>>>>>");
            return result;
        }
    
        @Override
        public int sub(int i, int j) {
            // TODO Auto-generated method stub
            
            int result=i-j;
            return result;
        }
    
        @Override
        public int mul(int i, int j) {
            // TODO Auto-generated method stub
            int result=i*j;
            return result;
        }
    
        @Override
        public int div(int i, int j) {
            // TODO Auto-generated method stub
            int result=i/j;
            return result;
        }
    
    }
    package aop;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Arrays;
    
    import org.springframework.jmx.export.assembler.MethodNameBasedMBeanInfoAssembler;
    public class wenProxy {
    //要代理的对象
        private AtithmeticCalculator target;
        public wenProxy(AtithmeticCalculator target)
        {
            this.target=target;
        }
        public AtithmeticCalculator getwenproxy()
        {
            AtithmeticCalculator proxy=null;
            //代理对象由哪一个加载器负责加载
            ClassLoader loader=target.getClass().getClassLoader();
            //代理对象的类型,既其中的代理方法
            Class [] interfaces=new Class[] {AtithmeticCalculator.class};
            //当调用代理的对象其中的方法时候,要执行的代码
            InvocationHandler h=new InvocationHandler() {
                /**
                 * proxy:正在返回的哪个代理的对象,一般情况夏。在invoke方法中都不使用该对象
                 * method:正在被调用的方法
                 * args:调用方法时,传入参数*/
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    // TODO Auto-generated method stub
                    String methodname=method.getName();
                    //日志
                    System.out.println("the method "+methodname+" begin with" +Arrays.asList(args));
                    //执行方法
                    Object result=method.invoke(target, args);
                    //日志
                    System.out.println("the method "+methodname+" begin with" +result);
                    
                    return 0;
                }
            };
            proxy=(AtithmeticCalculator) Proxy.newProxyInstance(loader, interfaces, h);
            return proxy;
        }
    }
    package aop;
    
    public class spring {
    public static void main (String []args) {
        AtithmeticCalculator target=new AtithmeticCalculatorImpl();
        AtithmeticCalculator proxy=new wenProxy(target).getwenproxy();
        int result=proxy.add(1, 2);
        System.out.println("--->"+result);
        result=proxy.div(4, 2);
        System.out.println("--->"+result);
        
    }
    }

    aop的优势是:使每个事物逻辑位于一个模块,代码不分散便于维护和升级,业务模块更加简洁只包含核心代码

    相关知识点如下:

  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/dazhi151/p/12644080.html
Copyright © 2011-2022 走看看