spring小结一(四)
ut.println("代理类" + obj.getClass());
System.out.println("方法名称" + method.getName());
if(args!=null && args.length>0) {//方法的参数值
for(int i=0; i
System.out.println("方法参数" + args[i]);
}
Object returnvalue = null;//方法的返回值,无返回类型时,为null
returnvalue = methodProxy.invoke(this.targetObject, args);//调用目标对象的方法
System.out.println("方法的返回值" + returnvalue);
return returnvalue;
}
return null;
}
}
(3)spring的两种代理方式(默认是jdk动态代理)
* 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理.
优点:因为有接口,所以使系统更加松耦合
缺点:为每一个目标类创建接口
* 若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在.
缺点:因为没有使用接口,所以系统的耦合性相对要差.
2.AOP编程
(1)概念
* Aspect(切面):比如说事务、权限等,与业务逻辑没有关系的部分.
* joinpoint(连接点):目标类的目标方法,由客户端在调用的时候决定
* Pointcut(切入点):指我们要对那些拦截的方法的定义,被纳入spring aop中的目标类的方法
* Advice(通知):指拦截到joinpoint之后要做的事情就是通知.
分为,前置通知、后置通知、异常通知、最终通知、环绕通知.
* Target(目标对象):代理的目标对象
* Weaving(织入)pid=11&gid=1:指把切面应用到目标对象来创建新的代理对象的过程.
切面在指定的连接点织入到目标对象.
(2)对应JDKProxy代理中的概念
SpringAop JDKProxy代理
目标对象 目标对象
切面 拦截器类
通知 拦截器类中的方法
切入点 被拦截到的目标类中方法的集合
连接点 在客户端调用的方法(目标类目标方法)
AOP代理 代理类
织入 代理类的代理方法生成的过程
(3)AOP实现的两种模式
* xml形式
[
html]
* 前置通知:
* method="checkSecutiry":表示把切面(security)中checkSecurity方法定义为前置通知
* pointcut-ref="perform":把切入点应用到通知.
* 前置拦截的类必须实现MethodBeforeAdvice接口,实现其中的before方法
* 后置通知:
* return="val" 通知里可以有返回参数,这个参数只能决定通知里能不能拿到方法的返回值,和客户端没关系.
* 在执行目标类的目标方法中遇到异常,则不执