AOP的应用场景

1,AOP思想:基于代理的思想,对原来的对象,创建代理对象,在不修改原来对象代码的情况下,通过代理对象,修改功能代码,从而对原来业务代码进行调整。

2,AOP的使用场景:

  I,记录日志。

 II,监控性能。

III,权限控制。

IV,缓存优化。

 V,事务管理。

3,Aop的实现方式:JDK动态代理和CGLIB动态代理

  JDK动态代理针对于有接口实现的类:

  public interface UserDao{

   public void saveUser();

  }

  public class UserDaoImpl implements UserDao{

     @Override

     public void saveUser(){

        System.out.println("hello");

   }
}

JDK动态代理实现:

   final UserDao  = new UserDaoImpl();

   UserDao proxy = (UserDao)proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces,new InvocationHandler(){

        //  InvocationHandler是一个回调接口,回调的时候执行的invoke方法

         @Override

         public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{

             System.out.println("world");

             Object result = method.invoke(userDao,args);

             return result; 

        }

   });

   proxy.saveUser();

}

console:

 hello

 world

CGLIB动态代理主要针对没有接口实现的对象:

public class LinkManDao{

   public void save(){

       System.out.println("hello");

   }

}

CGLIB动态代理实现:

final LinkManDao linkManDao = new LinkManDao();

Enhancer enhancer = new Enhancer();

enhancer.setSuperClass(linkManDao.getClass());

enhancer.setCallBack(new MethodIntercepter(){

   @Override

   public Object intercept(Object proxy,Method method,Object[] args,MethodProxy methodProxy)throws Throwable{

      System.out.println("world");

      Object result = method.invoke(linkManDao,args);

       return result;

  }

});

LinkManDao proxy = (LinkManDao)enhancer.create();

proxy.save();

 

你可能感兴趣的:(AOP的应用场景)