AOP 与 Spring中AOP使用

AOP简介

  • 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,
  • 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
  • AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
  • 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

开发存在的问题

JDK动态代理

JDK动态代理必须依赖接口(必须有接口)

public interface GoodsDao {
    public void save();
    public void update();
}

接口实现类:

public class GoodsDaoImpl implements GoodsDao {
    @Override
    public void save() {
        System.out.println("保存操作");
    }

    @Override
    public void update() {
        System.out.println("更新操作");
    }
}

JDK动态代理类:

public class GoodsJDKProxy {
    public GoodsDao createProxy(GoodsDao goodsDao){
        // 增强功能
        GoodsDao goodsDaoProxy = (GoodsDao)Proxy.newProxyInstance(goodsDao.getClass().getClassLoader(), goodsDao.getClass().getInterfaces(),
                new InvocationHandler() {
                    // 当调用对象的时候,所有的方法都会来到这里
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if ("save".equals(method.getName())){
                            System.out.println("权限检验");
                            GoodsDao goodsDao1 = (GoodsDao)method.invoke(goodsDao, args);
                            System.out.println("退出");
                            return goodsDao1;
                        }
                        return method.invoke(goodsDao, args);
                    }
                });

        return goodsDaoProxy;
    }
}

测试:

@Test
public void test() {
    GoodsDao goodsDao = new GoodsDaoImpl();
//        goodsDao.save();

    GoodsJDKProxy goodsJDKProxy = new GoodsJDKProxy();
    GoodsDao proxy = goodsJDKProxy.createProxy(goodsDao);
    proxy.save();
    proxy.update();
}

猜你喜欢

转载自www.cnblogs.com/xzh0717/p/10847528.html
AOP