`
8366
  • 浏览: 798778 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第16讲 --使用CGLIB实现AOP功能与AOP概念解释

阅读更多

 

当代理对象没有实现接口,我们就可以 使用CGLIB生成代理 ,需要我们使用 cglib-nodep-2.1_3.jar

修改上一讲的代理工厂类  ,命名为CGlibProxyFactory ,需要实现 MethodInterceptor 接口

 

public class CGLIBProxy implements MethodInterceptor {
	private Object targetObject;//代理的目标对象	
	public Object createProxyInstance(Object targetObject){
		this.targetObject = targetObject;
		Enhancer enhancer = new Enhancer();//该类用于生成代理对象
		enhancer.setSuperclass(this.targetObject.getClass());//设置父类
		enhancer.setCallback(this);//设置回调用对象为本身
		return enhancer.create();
	}
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		return methodProxy.invoke(this.targetObject, args);
	}
}
CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。

 

 

测试:

 

CGlibProxyFactory factory = new CGlibProxyFactory();
			PersionServiceBean service = (PersionServiceBean) factory.createProxyIntance(new PersionServiceBean("xxx"));
			service.save("999");

 

结果:略

 

 

AOP中的概念

Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面横切性关注点的抽象.

 

joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器)

 

Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义.

 

Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知

 

Target(目标对象):代理的目标对象

 

Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入.

 

Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

 

 

总结:

JDK动态代理 : 需要代理的对象要实现接口,代理对象要实现 InvocationHandler  接口
 
使用CGLIB生成代理 : 需要代理的对象可以不用实现接口,代理对象要实现 MethodInterceptor  接口
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics