1,AOP思想:基于代理的思想,对原来的对象,创建代理对象,在不修改原来对象代码的情况下,通过代理对象,修改功能代码,从而对原来业务代码进行调整。
2,AOP的使用场景:
I,记录日志。
II,监控性能。
III,权限控制。
IV,缓存优化。
V,事务管理。
3,Aop的实现方式:JDK动态代理和CGLIB动态代理
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
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();