静态代理:
静态代理实现:
定义接口--定义目标类-定义切面类-定义代理类
代理类实现接口,实现了目标类的方法,调用切面类的方法
静态代理的特点:
在不改变目标类的基础上,扩展了目标类的功能
静态代理的缺点:
随着业务的发展,代理类的数量会不断增加,接口中的方法增加,需要修改目标类和代理类的方法
动态代理:
动态代理的实现:
定义接口--定义目标类-定义切面类-定义动态代理的辅助类。
辅助类实现InvocationHandler接口
1)//获取动态代理类的对象
/**
* 生成代理类对象
* arg0:代理目标类的类加载器
* arg1:代理目标类的接口对象
* arg2:实现了InvocationHandler接口的对象
*/
public Object getProxy(){
return Proxy.newProxyInstance(StudentService.class.getClassLoader(),StudentService.class.getInterfaces(), this);
}
2)//调用目标类的方法
/**
* 调用目标类的方法
*/
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
studentAop.log();//模拟前置通知
obj=method.invoke(service, args);
return null;
}