spring Aop 理解

来源:互联网 发布:无法连接至steam网络 编辑:程序博客网 时间:2024/05/21 10:26

最近一直在边改bug边研究Spring 作为一个新手程序猿 Spring在我面前简直就是博大精深 其中的IOC和AOP就是Spring的精髓  ,其中的AOP便是面向对象设计思想的补充

AOP Aspect Oriented Programming  面向切面编程 在我看来 aop便是那个为了软件开发过程中高内聚低耦合 

    AOP在实际的工作环境中一般用在事务控制 其主要实现原理是利用代理技术实现的

  1  动态代理

     jdk1.5中提供,利用反射。实现InvocationHandler接口

   /**
 * 动态代理类
 * 
 * @author liangweiming
 * 
 */
public class DynamicProxy implements InvocationHandler {


    /** 需要代理的目标类 */
    private Object target;


    /**
     * 写法固定,aop专用:绑定委托对象并返回一个代理类
     * 
     * @param delegate
     * @return
     */
    public Object bind(Object target) {
        this.target = target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }


    /**
     * @param Object
     *            target:指被代理的对象。
     * @param Method
     *            method:要调用的方法
     * @param Object
     *            [] args:方法调用时所需要的参数
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = null;
        // 切面之前执行
        System.out.println("切面之前执行");
        // 执行业务
        result = method.invoke(target, args);
        // 切面之后执行
        System.out.println("切面之后执行");
        return result;
    }


}

/**
 * 测试类
 * 
 * @author liangweiming
 * 
 */
public class Test {


    public static void main(String[] args) {
        // 绑定代理,这种方式会在所有的方法都加上切面方法
        ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());
        iTalk.talk("业务说明");
    }
}

  输出结果

切面之前执行
people talk业务说法
切面之后执行

从上面的代码可以看出 可以在需要的业务代码之前动态的加入切面方法 不过此种方法需要代理类实现接口 有其局限性

0 0
原创粉丝点击